以下の構造に似た配列を反復処理しようとしています。同じ ID を持つオブジェクトごとに、それらを 1 つのオブジェクトに結合しますが、その ID に関連付けられたすべての「名前」の配列を使用します。私の配列はIDで事前にソートされており、JQueryを使用できず、バニラJSのみを使用できます.
これを変換します:
var array = [
{id=1, name = "Orange"},
{id=1, name = "Blue"},
{id=1, name = "Green"},
{id=2, name = "Blue"},
{id=3, name = "Orange"},
{id=3, name = "Blue"}
]
これに:
var newArray = [
{id=1, nameList = [Orange, Blue, Green]},
{id=2, nameList = [Blue]},
{id=3, namelist = [Orange, Blue]}
]
最初のオブジェクトを配列内の次のオブジェクトと比較し、最初のオブジェクトを 2 番目のオブジェクトに設定することで、このようなことをしようとしましたが、「secondObject」が実際には配列内の次のオブジェクトではなかったため、行き詰まりました。
for (var i in array) {
firstObject = array[i];
secondObject = array[i + 1];
if (firstObject.id === secondObject.id) {
firstObject['nameList'] = [firstObject.name + ',' + secondObject.name]
} else {
continue;
}
firstObject = secondObject;
}
数千の ID でこれを行う必要があり、ほとんどの ID は異なる名前で繰り返されますが、ID 2 のような単一の ID オブジェクトがいくつかあります。