2016-12-15 4 views
0

私はjQueryの中で二つの配列を持っている、と私は何をしたい私の必要な形式で他の配列への最初の配列のデータをプッシュです:結果にNANを追加せずにjQueryの別の配列でデータをプッシュするにはどうすればいいですか?

var mine = [ 
{"new":"new"}, 
{"old":"old"} 
]; 

var mynew = []; 

は、今私は私を入れたい:例えば以下の私のアレイのが与えられていますmine配列のデータをmynew配列に変換します。

jQuery.each(mine, function() { 
       jQuery.each(this, function (name, data) { 
        mynew.push({text: +"'"+name+"'"+ ', value: ' +"'"+data+"'"}); 
       }); 
      }); 

と私の必要な出力のようなものを以下に示す必要があります。

[ 
{text: 'new', value: 'new'}, 
{text: 'old', value: 'old'} 
] 

私は右のそれをやっていると思いますが、以下に示すように、結果のデータは、いくつかのものです:

Object {text: "NaNnew', value: 'new'"} 

私が望んでいるものではないことは明らかです...私のために私の望むレイアウトを印刷する人はどれですか?

+0

最初に '+" '"を削除してください。単項演算子として機能し、オペランドを数値に変換しようとします。 – sabithpocker

答えて

0

質問でjavascriptでこれ

jQuery.each(mine, function() { 
       jQuery.each(this, function (name, data) { 
        mynew.push({text: name , value: data }); 
       }); 
      }); 
+1

あなたは私の一日の仲間を救ったよ、人生の節約...誠に多くの感謝をもう一度、本当にあなたの答えが魅力のように働いていた....素晴らしい:) – laraib

+0

あなたは歓迎ですが、してくださいこの回答は受け入れられました! :) –

0

試み、

jQuery.each(mine, function() { 
     jQuery.each(this, function (name, data) { 
       mynew.push({ text: name, value: data}); 
     }); 
    }); 
+0

それを受け入れてください – azad

0

NaNは単項+オペレータを評価数値に'を変換しようと+"'"を評価した結果です。あなたは と言われています はオブジェクトをこのように文字列連結を使用してはいけません!

{text: (+"'") + (name) + ("'") + (', value: ') + ("'") + (data) + ("'") } 
//{text: "NaName', value: 'data'"} 

これは偶数値のためkeyを作成し、だけではなく、長い文字列を持つtext鍵を持っていません。


単純なオブジェクト作成構文を使用してください。

mynew.push({text:name, value:data}); 

オブジェクトを文字列に変換する場合は、後でいつでもJSON.stringifyを使用できます。

1

問題を試みるが

text: +"'"+name+"'"+ ', value: ' +"'"+data+"'" 

引用符は必要ありませんされています。値dataを取得しています(この場合は文字列です)。 nameは、値ではなく配列の現在の要素のindexです。あなたは上記の行


mynew.push({text:data, value:data}); 
については、以下の行を代入して質問に javascriptでパターンを使用することができ、ネストされた $.each()呼び出しが期待される結果を返すことが必要ではありません。あなたは、 newオペレータは javascriptに予約語である "new"性質のため、

var mine = [ 
 
    {"new":"new"}, 
 
    {"old":"old"} 
 
]; 
 

 
var mynew = mine.map(({["new"]:n, old:o}) => ({text:(n||o), value:(n||o)})); 
 

 
console.log(mynew);
.map()、オブジェクト非構造、計算プロパティを矢印機能使用あるいは Array.prototype.map()Object.keys()

var mine = [ 
 
    {"new":"new"}, 
 
    {"old":"old"} 
 
]; 
 

 
var mynew = mine.map(function(obj) { 
 
    var value = obj[Object.keys(obj)[0]]; 
 
    return {text:value, value:value} 
 
}); 
 

 
console.log(mynew);

を使用することができ

+1

'Array#map'を使うのに' $ .map'を使うのはなぜですか? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map – Punit

+0

@Punit良い点。 – guest271314

-1

Array.filterのdocumentを見てください。特にコールバックの引数に注意してください。

配列の各要素をテストする機能。引数(element、index、array)を指定して呼び出されます。要素を保持する場合はtrueを返し、そうでない場合はfalseを返します。 あなたのケースでは、arrが要素です(そして名前が不十分で、混乱します)。フィルタは配列をループし、コールバックするすべての項目に対して、現在の位置の要素をarrとして渡します。

コメントに他の人が指摘しているように、フィルタコールバックのロジックに実際に負の値が付いていますが、配列に負の値が含まれないことがわかっている場合は問題ありません想定する危険なもの)。

もちろん、内部的には、これはあなたの配列をループしています。配列内の各要素に触れることなく、(ソートされていない)配列をフィルタリングすることはできません。リンク内のpolyfilを見て、どのように動くかもしれないかを考えてください(これは、異なるjavascriptエンジンでは異なるかもしれない実装の詳細ですが、どこかにループを含むことは間違いありません)、配列をループし、コールバック(引数に注意)、コールバックがtrueを返す場合は結果配列にプッシュされます。

関連する問題