2017-02-04 10 views
0

それぞれのループで2つのアイテムを結合しようとしましたが、結果としてヌルがあります。どのようにして「アイテム」をチェックしてヌルを取得しないのですか?2つのアイテムをループして結合する

var oTitle = [], 
items = ['a1', 'a2', 'b1', 'b2', 'c1', 'c2']; 

for (var i=0; i < items.length; i++) { 
oTitle[i] = { 
    one: '' + items[i], // items[i].value 
    two: '' + items[++i] 
}; 
} 


console.log(JSON.stringify(oTitle)); 

// [{"one":"a1","two":"a2"},null,{"one":"b1","two":"b2"},null,{"one":"c1","two":"c2"}] 

答えて

2

あなたはforループの体内にiを変更するので。 items[++i]に電話すると、実際にはiが変更されます。そして、2回目の反復ではi1ではありませんが、それは2です。

oTitles0インデックスは準備ができていますが、2番目の繰り返しではi2です。したがって、値は0 2 4になります。 1,3,5のインデックスとそれ以外には値がないので、なぜnullを印刷するのですか?

実際にこれらのインデックスの場合、配列にはnullではなく、undefinedが含まれます。しかし、JSON.stringifyを使用しているので、undefinednullに変換します。

期待される結果を得るには、配列のインデックス付けのために別の変数を保持するか、インデックス付けのために配列のpushメソッドを使用する必要があります。

INDEX

var oTitle = []; 
 
var index = 0; 
 
items = ['a1', 'a2', 'b1', 'b2', 'c1', 'c2']; 
 

 
for (var i=0; i < items.length; i++) { 
 
oTitle[index] = { 
 
    one: '' + items[i], // items[i].value 
 
    two: '' + items[++i] 
 
}; 
 
index++; 
 
} 
 

 

 
console.log(JSON.stringify(oTitle));

PUSH

var oTitle = []; 
 
items = ['a1', 'a2', 'b1', 'b2', 'c1', 'c2']; 
 

 
for (var i=0; i < items.length; i++) { 
 
oTitle.push({ 
 
    one: '' + items[i], // items[i].value 
 
    two: '' + items[++i] 
 
}); 
 
} 
 

 

 
console.log(JSON.stringify(oTitle));

+0

新しい配列のインデックスは、自分自身の世話を聞かせて、それが各ループが生成されます番号をスキップ原因となります。 ' 0,1 '、' 3,4 '、' 6,7 '....... – Sinux

1

だけpush()を使用し、最初のスニペットの最後の `指数++が`間違っている

var oTitle = [], 
 
    items = ['a1', 'a2', 'b1', 'b2', 'c1', 'c2']; 
 

 
for (var i = 0; i < items.length; i++) { 
 
    oTitle.push({ 
 
    one: '' + items[i], // items[i].value 
 
    two: '' + items[++i] 
 
    }); 
 
} 
 

 
console.log(JSON.stringify(oTitle, null, ' '))

関連する問題