如何从数组中删除重复项,如果值设置为重复项之一,否则保持null (javascript/typescript).<



我需要从javascript (typescript)中的数组中删除重复或空值(集),如果在完全相同的日期有非空值的数据。如果那天所有的值(集合)都是空的,我们应该保留一个值。

例子:

0: (2) ['2022-12-05', null]   ---> Remove due to "Reason 1"
1: (2) ['2022-12-05', 2695.923015841]   ---> Remain because it has a y value (on 5 Dec)
2: (2) ['2022-12-05', null]   ---> Remove due to "Reason 1"
3: (2) ['2022-12-05', null]   ---> Remove due to "Reason 1"
4: (2) ['2022-12-12', null]   ---> Remove due to "Reason 1"
5: (2) ['2022-12-12', 3984.864626441]   ---> Remain because it has a y value (on 12 Dec)
6: (2) ['2022-12-12', null]   ---> Remove due to "Reason 1"
7: (2) ['2022-12-12', null]   ---> Remove due to "Reason 1"
8: (2) ['2022-12-19', null]   ---> Remove due to "Reason 2"
9: (2) ['2022-12-19', null]   ---> Remove due to "Reason 2"
10: (2) ['2022-12-19', null]   ---> Remove due to "Reason 2"
11: (2) ['2022-12-19', null]   ---> Remain because no y value on this date

原因1:该数组成员应该被删除,因为在相同的日期有一个空值(在x中指定)。

0: (2) [x: Date, y: value]

原因2:该成员应该被删除,因为我们有4个具有相同值的重复对象,我们只需要其中一个。

预期结果:

它将是一个包含3个值(集合)的数组。

0: (2) ['2022-12-05', 2695.923015841]   ---> Remain because it has a y value 
1: (2) ['2022-12-12', 3984.864626441]   ---> Remain because it has a y value 
2: (2) ['2022-12-19', null]   ---> Remain because no y value on this date

您可以使用一个循环减少数组并检查date

const
data = [['2022-12-05', null], ['2022-12-05', 2695.923015841], ['2022-12-05', null], ['2022-12-05', null], ['2022-12-12', null], ['2022-12-12', 3984.864626441], ['2022-12-12', null], ['2022-12-12', null], ['2022-12-19', null], ['2022-12-19', null], ['2022-12-19', null], ['2022-12-19', null]],
result = data.reduce((r, [date, value], i, a) => {
if (i && a[i - 1][0] === date) r.at(-1)[1] ||= value;
else r.push([date, value]);
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

const arr = [
['2022-12-05', null],
['2022-12-05', 2695.923015841],
['2022-12-05', null],
['2022-12-05', null],
['2022-12-12', null],
['2022-12-12', 3984.864626441],
['2022-12-12', null],
['2022-12-12', null],
['2022-12-19', null],
['2022-12-19', null],
['2022-12-19', null],
['2022-12-19', null],
];
const newArr = [...new Set(arr.map(item => item[0]))].map(item => {
const findVal = arr.find(_item => _item[0] === item && _item[1]);
if (findVal) return findVal;
return [item, null];
});
console.log(newArr);

最新更新