2 回答
TA贡献1818条经验 获得超8个赞
遍历数组时,将每个对象分配给键为月份的对象。这样,如果后一项与前一项具有相同的月份,则后一项将覆盖对象上的前一项。
var input = [ { month: 'Jan', value: 3 },
{ month: 'Jan', value: 3.5 },
{ month: 'Feb', value: 2.1 },
{ month: 'Mar', value: 6 },
{ month: 'Apr', value: 4.3 },
{ month: 'May', value: 5.5 },
{ month: 'Jun', value: 7 },
{ month: 'Jun', value: 9 },
{ month: 'Jul', value: 7 },
{ month: 'Jul', value: 9 },
{ month: 'Jul', value: 7 },
{ month: 'Aug', value: 9 },
{ month: 'Sep', value: 9 },
{ month: 'Sep', value: 9 },
{ month: 'Oct', value: 8 },
{ month: 'Oct', value: 5 },
{ month: 'Oct', value: 3 },
{ month: 'Nov', value: 12 },
{ month: 'Nov', value: 19.5 }
];
const obj = {};
for (const item of input) {
obj[item.month] = item;
}
const output = Object.values(obj);
console.log(output);
TA贡献1847条经验 获得超7个赞
如果月份的顺序是连续的,您可以按如下方式使用 reduce:
const input = [{ month: 'Jan', value: 3 }, { month: 'Jan', value: 3.5 }, { month: 'Feb', value: 2.1 }, { month: 'Mar', value: 6 }, { month: 'Apr', value: 4.3 }, { month: 'May', value: 5.5 }, { month: 'Jun', value: 7 }, { month: 'Jun', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Jul', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Aug', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Oct', value: 8 }, { month: 'Oct', value: 5 }, { month: 'Oct', value: 3 }, { month: 'Nov', value: 12 }, { month: 'Nov', value: 19.5 }];
const result = [];
input.reduce((a, v, i) => {
const eleIdx = a.findIndex(e => e.month === v.month);
if (eleIdx > -1 && input[i - 1].month === v.month) {
a[eleIdx].value = v.value;
} else {
a.push(v);
}
return a;
}, result);
console.log(result);
添加回答
举报