As *_*low -1 javascript arrays ecmascript-6
这个问题可能有点含糊,但我会用一个例子来解释我期望得到的结果。
假设我有以下数组由具有以下形状的对象组成:
[
{
id: 1,
value: 10
},
{
id: 2,
value: 100
},
{
id: 3,
value: 10
},
{
id: 4,
value: 10
},
{
id: 5,
value: 1000
},
]
Run Code Online (Sandbox Code Playgroud)
这个数组可能包含数百个,也可能包含数千个条目,但为了简单起见,我会保持它很小。
我想要实现的是将value每个对象的value属性与其他属性进行比较,并为该duplicate特定对象分配一个具有布尔值的新属性。
鉴于上面的示例,我希望收到一个包含以下成员的数组:
[
{
id: 1,
value: 10,
duplicate: true
},
{
id: 2,
value: 100
},
{
id: 3,
value: 10,
duplicate: true
},
{
id: 4,
value: 10,
duplicate: true
},
{
id: 5,
value: 1000
},
]
Run Code Online (Sandbox Code Playgroud)
我可以实现这种行为的最佳方式是什么?
谢谢你。
我会在数组中执行一次遍历,记住第一个看到的具有给定值的条目 a Map,如果第一个条目(和任何其他条目)存在,则将其标记为重复项,如下所示:
const map = new Map();
for (const entry of array) {
const previous = map.get(entry.value);
if (previous) {
previous.duplicate = entry.duplicate = true;
} else {
map.set(entry.value, entry);
}
}
Run Code Online (Sandbox Code Playgroud)
现场示例:
const array = [
{
id: 1,
value: 10
},
{
id: 2,
value: 100
},
{
id: 3,
value: 10
},
{
id: 4,
value: 10
},
{
id: 5,
value: 1000
},
];
const map = new Map();
for (const entry of array) {
const previous = map.get(entry.value);
if (previous) {
previous.duplicate = entry.duplicate = true;
} else {
map.set(entry.value, entry);
}
}
console.log(array);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |