首页 > 解决方案 > 如何在对象数组中查找特定键是否为真

问题描述

我有这个数组,如果有一个等于 9 的“三”,我想得到一个布尔值(真)

myArr = [{苹果:6,篮子:[{一:1,二:2,三:3},{一:4,二:5,三:6}]},{苹果:9,篮:[{一:1,二:2,三:3},{一:4,二:5,三:9}]}]

我尝试了什么:

enter code here

this.myArr.forEach( data => {
      if(data.basket.filter(cur => cur.one === 0 || cur.three === 9)) {
       console.log('true')
      }
    })

由于某种原因,这总是正确的,我不知道为什么。

标签: javascriptarraystypescriptobjectecmascript-6

解决方案


.filter将始终返回通过测试的元素数组,并且数组是真实的。即使没有元素通过测试,数组仍然是真实的:

const arr = [1, 2, 3].filter(() => false);
if (arr) {
  console.log('truthy');
}

改为使用.some,以查看是否至少有一个元素通过了测试:

const myArr = [{
  apple: 6,
  basket: [{
    one: 1,
    two: 2,
    three: 3
  }, {
    one: 4,
    two: 5,
    three: 6
  }]
}, {
  apple: 9,
  basket: [{
    one: 1,
    two: 2,
    three: 3
  }, {
    one: 4,
    two: 5,
    three: 9
  }]
}]

myArr.forEach(data => {
  if (data.basket.some(cur => cur.one === 0 || cur.three === 9)) {
    console.log('true');
  }
});


推荐阅读