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

标签 javascript arrays

所以我有一个包含一些对象的数组。我想将这些对象相互比较。如果 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/

相关文章:

javascript - CSS3 动画 Buggy/Blinky

javascript - 如何根据用户将告诉键及其值的子数组的值来过滤此数组

javascript - 本例中的 Alexa 技能 : How to insert a AMAZON. yesintent 和 AMAZON.nointent ?

php - Chrome 中的 JavaScript 问题

javascript - 将 javascript var 值集成到重定向中

arrays - 我可以检查是否仅在某个字段值尚未填充时才推送值吗?

javascript - 如何使用jquery从输入文本数组中检测当前输入文本的索引

javascript - 使用变量作为 mongodb 中字段名称的一部分?

php - extract() 有什么问题?

c - 读入一个包含 5 行的文本文件,并将其填充到 C 中的二维数组中