提问者:小点点

如何使分组最快,前提是数组中的数据也显示对象nodeJs


你好,这是我的阵列;

arr =[{cNo:1,buyOrSel:'A',ip:192.168.1.1},{cNo:1,buyOrSel:'S',ip:192.168.1.1},{cNo:2,buyOrSel:'S',ip:192.168.1.2},{cNo:3,buyOrSel:'A',ip:192.168.1.1},{cNo:4,buyOrSel:'S',ip:192.168.1.3},{cNo:5,buyOrSel:'S',ip:192.168.1.2}]

我想像这样对对象进行分组;

[{cNo:'1,3',ip:192.168.1.1},{cNo:'2,5',ip:192.168.1.2}]

我不想用嵌套来实现循环,最好的方法是什么?


共3个答案

匿名用户

null

let arr = [{cNo:1,buyOrSel:'A',ip:"192.168.1.1"},{cNo:1,buyOrSel:'S',ip:"192.168.1.1"},{cNo:2,buyOrSel:'S',ip:"192.168.1.2"},{cNo:3,buyOrSel:'A',ip:"192.168.1.1"},{cNo:4,buyOrSel:'S',ip:"192.168.1.3"},{cNo:5,buyOrSel:'S',ip:"192.168.1.2"}];

arr = arr.reduce((prev, a) => {
  let cNo = prev[a.ip] = prev[a.ip] || [];

  if (cNo.indexOf(a.cNo) < 0) {
    prev[a.ip].push(a.cNo);
  };
  return prev
}, {});

arr = Object.keys(arr).map(key => {
  return {
    cNo: arr[key].join(),
    ip: key
  }
});

console.log(arr);

匿名用户

可以使用object进行更好的分组。 而不是只推cNo,您也可以推整个对象。

let arr = [{cNo:1,buyOrSel:'A',ip:"192.168.1.1"},{cNo:1,buyOrSel:'S',ip:"192.168.1.1"},{cNo:2,buyOrSel:'S',ip:"192.168.1.2"},{cNo:3,buyOrSel:'A',ip:"192.168.1.1"},{cNo:4,buyOrSel:'S',ip:"192.168.1.3"},{cNo:5,buyOrSel:'S',ip:"192.168.1.2"}];

let objectByIP = {};

arr.forEach(element => {
  if (!objectByIP[element.ip]) {
    objectByIP[element.ip] = [element.cNo];
  } else {
    objectByIP[element.ip].push(element.cNo);
  }
});

console.log(objectByIP);
console.log(Object.keys(objectByIP));

匿名用户

您可以使用map():

设a=arr.map(a=>{return{cno:a.cno,ip:a.ip}})