Javascript 将阵列中具有simular id的对象分离到新阵列中
如果我有一个对象数组Javascript 将阵列中具有simular id的对象分离到新阵列中,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,如果我有一个对象数组 var myArray = [] 居住 var myObject = { id: 1, name: 'example' } 假设“myArray”有6个“MyObject”,其中一半共享相同的id,我需要一个按id分隔“MyObject”的函数,以便我可以将其传递给另一个需要分隔id的函数 myArray数据有一个算法 2*3(6)个“MyObject”的示例,其中一半共享相似的id:[id:1,id:2,id:3,id:1,id:2,id:3] 我想把它分成3个
var myArray = []
居住
var myObject = {
id: 1,
name: 'example'
}
假设“myArray”有6个“MyObject”,其中一半共享相同的id,我需要一个按id分隔“MyObject”的函数,以便我可以将其传递给另一个需要分隔id的函数
myArray数据有一个算法
2*3(6)个“MyObject”的示例,其中一半共享相似的id:[id:1,id:2,id:3,id:1,id:2,id:3]
我想把它分成3个数组。[id:1,id:1][id:2,id2][id:3,id:3]
我怎样才能以简单有效的方式进行这项工作 您可以使用lodash及其方法。大概是这样的:
const sorted = _.groupBy(myArray, 'id');
(顺便说一句,未测试)普通JS
var groupedById = arr.reduce((map,obj) => {
(map[obj.id] || (map[obj.id] = [])).push( obj );
return map;
});
var itemsWithSameId = Object.keys( groupedById ).map(id => groupedById[id]);
试试这个,输出是数组的数组。
var myArray=[
{id:1,名称:'example'},
{id:2,名称:'example'},
{id:3,名称:'example'},
{id:1,名称:'example'},
{id:2,名称:'example'},
{id:3,名称:'example'},
{id:1,名称:'example'},
{id:2,名称:'example'},
{id:3,名称:'example'}
]
var tempObj={};
$.each(myArray,函数(索引,值){
如果(!tempObj[value.id]){
tempObj[value.id]=[];
}
tempObj[value.id].push(值);
});
finalArray=[]
$。每个(临时对象,函数(i,v){
最后推(v);
});
document.write(JSON.stringify(finalArray))代码>
未优化,但工作示例:
var array = [{id:1},{id:2},{id:3},{id:1},{id:2},{id:3}];
var resultObj = {};
var resultArray = [];
array.forEach(function(x) {
//get the id
var id = x.id;
//if id is unknown, add new key to resultObj
if (!resultObj.hasOwnProperty(id)) {
resultObj[id] = [];
}
//add object to id
resultObj[id].push(x);
});
//loop over resultObj keys
for (var key in resultObj) {
if (resultObj.hasOwnProperty(key)) {
//push array to 2dArray
resultArray.push(resultObj[key]);
}
}
//show results
console.log(resultObj);//{1:[{id:1}, {id:1}], 2:[...], ...]}
console.log(resultArray);//[[{id:1}, {id:1}], [...], ...]
Fiddle:这是一个普通的JavaScript版本,它可以进行整理,但可以完成工作
它所做的只是循环你的对象的数组
,对于第一个循环
,将对象的id
推到一个临时数组
(跟踪id
)在主数组中创建一个新的数组
,其中对象
,在每个后续的循环
中,它检查是否存在具有相同id
的条目,并将其添加到正确的位置,否则会使用对象
创建一个新的数组
,并再次跟踪idArr
中的id
function filterArray(arr) {
var masterArr = [], idArr = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (i === 0) {
idArr.push(arr[i].id);
masterArr.push([arr[i]]);
} else {
var idCheck = idArr.indexOf(arr[i].id);
if (idCheck > -1) {
masterArr[idCheck].push(arr[i]);
} else {
idArr.push(arr[i].id);
masterArr.push([arr[i]]);
}
}
}
return masterArr;
}
这是一个提案,其中有一个临时对象作为分组id项的引用
var data=[{id:1},{id:2},{id:3},{id:1},{id:2},{id:3}],
结果=[];
data.forEach(函数(a){
如果(!此[a.id]){
此[a.id]=[];
结果推送(此[a.id]);
}
此[a.id].push(a);
}, {});
document.write(“”+JSON.stringify(结果,0,4)+“”)代码>喜欢它,这里最好的一个+1
var mappedArray = filterArray(myArray);