【问题标题】:Javascript - Find duplicate item, merge and push in new array along with unique itemJavascript - 查找重复项,合并并推送新数组以及唯一项
【发布时间】:2021-05-24 00:02:58
【问题描述】:

这是我的代码 sn-p

let mainData = [
  { "date": "210201", "cordinatePoint": 0, "current": 105827649.12000011, "previous": null },
  { "date": "210101", "cordinatePoint": 0, "previous": 0, "current": null },
  { "date": "210202", "cordinatePoint": 1, "current": 0, "previous": null },
  { "date": "210102", "cordinatePoint": 1, "previous": 0, "current": null },
  { "date": "210102", "cordinatePoint": 2, "previous": 0, "current": null }
];
let data = [];

for (let i = 0; i < mainData.length - 1; i++) {
  if (mainData[i].cordinatePoint === mainData[i + 1].cordinatePoint) {
    mainData[i].current = mainData[i].current + mainData[i + 1].current;
    mainData[i].previous = mainData[i].previous + mainData[i + 1].previous;
    data.push(mainData[i]);
  }
}
            
console.log(data); // where is cordinatePoint:2 ???

我想根据cordinatePoint 找到重复的键值并添加它们的currentprevious 值。我什至想推送新数组中的非重复项。我无法实现第二部分。有人可以谈谈吗?

【问题讨论】:

标签: javascript arrays duplicates


【解决方案1】:

您正在迭代直到mainData.length-1,所以最后一个元素被忽略。此外,它也将被忽略,因为它没有“下一个”元素。试试这个:

const mainData = [
  { "date": "210201", "cordinatePoint": 0, "current": 105827649.12000011, "previous": null },
  { "date": "210101", "cordinatePoint": 0,  "previous": 0, "current": null },
  { "date": "210202", "cordinatePoint": 1, "current": 0, "previous": null },
  { "date": "210102", "cordinatePoint": 1, "previous": 0, "current": null },
  { "date": "210102", "cordinatePoint": 2, "previous": 0, "current": null }
];

const data = [];
for (let i = 0; i < mainData.length; i++) {
  const obj = mainData[i];
  if (mainData[i + 1] && obj.cordinatePoint===mainData[i + 1].cordinatePoint) {
    obj.current = obj.current + mainData[i + 1].current;
    obj.previous = obj.previous + mainData[i + 1].previous;
    i++;
  }
  data.push(obj);
}
            
console.log(data);

使用.reduce 的更好解决方案:

const mainData = [
  { "date": "210201", "cordinatePoint": 0, "current": 105827649.12000011, "previous": null },
  { "date": "210101", "cordinatePoint": 0,  "previous": 0, "current": null },
  { "date": "210202", "cordinatePoint": 1, "current": 0, "previous": null },
  { "date": "210102", "cordinatePoint": 1, "previous": 0, "current": null },
  { "date": "210102", "cordinatePoint": 2, "previous": 0, "current": null }
];

const data = mainData.reduce((acc,item) => {
  let { cordinatePoint, previous, current } = item;
  previous = previous||0;
  current = current||0;
  const obj = acc[cordinatePoint];
  if(obj) { obj.previous += previous; obj.current += current; }
  else { acc[cordinatePoint] = {...item, previous, current}; }
  return acc;
}, []);
            
console.log(data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多