gpt4 book ai didi

javascript - 获取具有唯一值的数组的长度

转载 作者:行者123 更新时间:2023-11-29 10:02:57 24 4
gpt4 key购买 nike

所以我有一个包含一些对象的数组。我想将这些对象相互比较。如果 fromId AND toId 属性相同,则为重复。

例子:

const data = [{
fromId: 1,
toId: 2,
finished: true
}, {
fromId: 1,
toId: 2,
finished: false
}, {
fromId: 5,
toId: 9,
finished: false
}, {
fromId: 1,
toId: 5,
finished: true
}, {
fromId: 2,
toId: 1,
finished: false
}];

$(document).ready(() => {
const duplicates = data.filter(x =>
data
.filter(y => y.fromId == x.fromId && y.toId == x.toId)
.length > 1
);

console.log(duplicates);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我想获取此数据数组的长度,但只能使用唯一值。我尝试删除所有重复值并在此处找到解决方案

Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array

const data = [1, 2, 3, 4, 5, 2, 2, 6, 7, 8, 2, 9, 2, 2, 2, 2, 2];

$(document).ready(() => {
const uniqueValues = data.filter((connection, index) => data.indexOf(connection) == index);

console.log(uniqueValues);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

但在这个解决方案中,我只对整个对象使用 indexOf。我如何比较 fromIdtoId 并删除相同匹配项的重复项?

我将从原始数组中删除一个

{
fromId: 1,
toId: 2,
finished: false
}

因为 fromIdtoId 已经存在于另一个对象中。

最佳答案

而不是 filter 嵌套在另一个 filter 中(糟糕的运行时复杂性),因为您只是在寻找结果唯一数组的长度,您可以将每个fromIdtoId 放入一个字符串,将该字符串放入一个 Set(只保留唯一值),然后检查 Set 的大小:

const data=[{fromId:1,toId:2,finished:!0},{fromId:1,toId:2,finished:!1},{fromId:5,toId:9,finished:!1},{fromId:1,toId:5,finished:!0},{fromId:2,toId:1,finished:!1}];

const idSet = new Set(data.map(({ fromId, toId }) => fromId + '_' + toId));
console.log(idSet.size);

关于javascript - 获取具有唯一值的数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51264013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com