我想删除值的重复项,但我想选择长度最大值的那个。
let meary = [];
meary.push({ name: "aaa", value: 90, length: 3 });
meary.push({ name: "bbb", value: 90, length: 5 });
meary.push({ name: "ccc", value: 80, length: 3 });
meary.push({ name: "ddd", value: 0, length: 4 });
meary.push({ name: "eee", value: 0, length: 3 });
meary = meary.filter((ele, index, arr) => {
// 重複削除
const isa =
arr.findIndex((item) => {
if (item.value === ele.value) {
if (item.length > ele.length) {
return true;
}
}
return false;
}) === index;
return isa;
});
console.log(JSON.stringify(meary));
这是我想要的结果
[
{ name: "bbb", value: 90, length: 5 },
{ name: "ccc", value: 80, length: 3 },
{ name: "ddd", value: 0, length: 4 }
]
这是获得的实际结果
[]
如何编写代码以获得我想要的结果?
您可以过滤掉那些具有相同值且长度小于数组中其他项目的项目:
const meary = [];
meary.push({ name: "aaa", value: 90, length: 3 });
meary.push({ name: "bbb", value: 90, length: 5 });
meary.push({ name: "ccc", value: 80, length: 3 });
meary.push({ name: "ddd", value: 0, length: 4 });
meary.push({ name: "eee", value: 0, length: 3 });
const result = meary.filter(
(x, i, a) => !a.some(
(y, j) => x.value === y.value && x.length < y.length && i != j
)
);
console.log(result);
Map 的良好用例,它比数组更有效地进行查找
const res = [...meary.reduce((a, c) => {
const { length: len, value: val } = c;
const ent = a.get(val);
return (!ent || ent.length < len) ? a.set(val, c) : a;
}, new Map).values()];
console.log(res)
<script>
const meary = [];
meary.push({ name: "aaa", value: 90, length: 3 });
meary.push({ name: "bbb", value: 90, length: 5 });
meary.push({ name: "ccc", value: 80, length: 3 });
meary.push({ name: "ddd", value: 0, length: 4 });
meary.push({ name: "eee", value: 0, length: 3 });
</script>