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);