【问题标题】:Looking for the best Array method to compare objects in array寻找比较数组中对象的最佳 Array 方法
【发布时间】:2020-10-23 06:28:09
【问题描述】:

样本数组

var myItems = [{height:500, width:400},{height:500, width:800},{height:500, width:700}]

而不是做

if(myItems[0].height !== myItems[1].height && myItems[0].height !== myItems[2].height && myItems[1].height !== myItems[2].height){
 // do smth about it
}

对于更大的数组,这段代码会变得很荒谬,所以我玩了这个

if (myItems.reduce((x,y)=>x.height!==y.height)){
 // do the same thing
}

问题是,这总是返回true,即使上面的值已经到位,所有项目都有相同的height值。

【问题讨论】:

  • 所有的结果是什么?
  • 这不是reduce 的工作方式。函数中的第一个参数是聚合器,第二个参数是下一项。聚合器的初始值取自传递给reduce 的第二个参数,或数组中的第一项;您可能希望从布尔值而不是对象开始。看起来您要求的是 n² 比较(每个对象与每个对象)而不是顺序比较,因此这不适用于单个 reduce
  • 检查this post它可能对你有帮助
  • @user4642212 我愿意接受任何有关其外观的建议。

标签: javascript arrays reduce


【解决方案1】:

您可以尝试将其转换为高度集,然后比较您的数组和高度集的长度。

var myItems = [{height:500, width:400},{height:500, width:800},{height:500, width:700}];

var heightSet = [...new Set(myItems.map(x => x.height))];

console.log(myItems.length === heightSet.length);

【讨论】:

  • 我不能将 [...arr] 扩展运算符与 buble 一起使用。
  • 使用[...something]等价于Array.from(something)@thednp
  • 这很好,但是我需要一些东西来使用 IE10+,还有其他想法吗?
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2017-11-09
  • 2012-05-14
  • 2017-06-07
相关资源
最近更新 更多