我想在重复项中提取最大值

  • 本文关键字:提取 最大值 javascript
  • 更新时间 :
  • 英文 :


我想删除值的重复项,但我想选择长度最大值的那个。

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>

最新更新