我从我的API获得此结果:
但是任何具有相同id的内容(如最后2个)我希望在一个对象中分组,因此数组中只有3个项目(0,1,2),最后一个项目将嵌套在最后一个,因为它有一个重复的ID。它从SQL中以正确的格式排序,所以我希望它保持它的顺序。
最多可能有50个具有相同ID但可能需要嵌套,我尝试使用数组和键但是无法获得所需的结果
if(data.length > 0){
console.log(value);
try{
if(value.id == s[key - 1].id){
console.log("match");
s.push(value);
} else {
orderobj.push(s);
}
} catch(ex){}
console.log(orderobj);
}
答案 0 :(得分:1)
由于您的所有喜欢ID都是连续的,因此您可以在从API数据创建新集合时进行非常简单的检查。只需继续将对象添加到数组中,直到ID不再匹配,然后将该数组添加到父数组中。
var apiData = [
{id: 1, text: '1asdf'},
{id: 2, text: '2asdf'},
{id: 3, text: '3asdf'},
{id: 4, text: '4asdf'},
{id: 4, text: '5asdf'},
];
var dataArray = [];
for(let i=0;i<apiData.length;++i) {
var dataItem = [];
dataItem.push(apiData[i]);
while(i < apiData.length-1 && apiData[i].id === apiData[i+1].id) {
++i
dataItem.push(apiData[i]);
}
dataArray.push(dataItem);
}
console.log('Final Array:', dataArray);
答案 1 :(得分:0)
我只是创建一个以ID作为键的对象映射,然后创建一个匹配对象数组作为值。然后按顺序循环对象键并从中创建一个数组:
let objectMap = data.reduce(function(o, i) {
if (!o[i.id]) o[i.id] = [];
o[i.id].push(i)
return o;
}, {})
concat:
let sortedKeys = Object.keys(objectMap).sort();
let groupedData = sortedKeys.reduce(function(d, k) {
d.push(objectMap[k]);
return d;
}, []); //return format: [[{id:1}],[{id:2}],[{id:3},{id:3}]
答案 2 :(得分:0)
试试这个
var apiData = [
{id: 1, text: '1asdf'},
{id: 2, text: '2asdf'},
{id: 3, text: '3asdf'},
{id: 4, text: '4asdf'},
{id: 4, text: '5asdf'},
];
var result = [];
apiData.forEach((item) => {
var saved = result.find((innerArr) => {
return innerArr.find((innerItem) => innerItem.id === item.id) ? true : false;
})
if(saved){
saved.push(item);
} else {
result.push([item]);
}
})
console.log(result);
答案 3 :(得分:0)
您可以使用array#reduce
。您可以在共享相同id
的数组中添加对象,然后使用Object.values()
来获取所有对象。
var arr = [{id:'27', uid: '7', code: 'HV0010SML', productid: '1', datetime: '2017-10-06 15:57:17'},{id:'28', uid: '7', code: 'HV0010MED', productid: '1', datetime: '2017-10-06 15:57:17'},{id:'29', uid: '7', code: 'HV0010LGE', productid: '1', datetime: '2017-10-06 15:57:17'},{id:'29', uid: '7', code: 'HV0010LGE', productid: '1', datetime: '2017-10-06 15:57:17'}];
var combined = arr.reduce((hash, obj) => {
return obj.id in hash ? hash[obj.id].push(obj) : hash[obj.id] = [obj], hash;
}, Object.create(null));
var result = Object.values(combined);
console.log(result);
.as-console-wrapper{max-height: 100% !important}