谁能告诉我代码中发生了什么?

Can any one tell me what is happening in the code?

const items = [
    { name: 'Bike', price: 100 },
    { name: 'TV', price: 200 },
    { name: 'Album', price: 10 },
    { name: 'Book', price: 5 },
    { name: 'Phone', price: 2000 },
    { name: 'Keyboard', price: 50 },
    { name: 'Mouse', price: 500 },
    { name: 'Computer', price: 30 },
]

const foundItem = Boolean(items.length) && items.filter(item => item.price === 10)

console.log(foundItem)

我很难理解代码above.Can谁能告诉我上面的代码发生了什么?

这里找到的项目是{ name: 'Album', price: 10 }

逻辑是过滤掉所有价格等于10的商品,而items的数组长度至少有1个商品。

并在控制台打印。

Boolean(item.length) 说:如果项目至少有一项。

item.filter(item => item.price === 10) 说:return 价格等于 10 的所有项目。filter 是一个数组方法 return符合您定义的条件的项目。

请告诉我们您不理解其中的哪一部分。布尔构造函数,&& shorthand 运算符,还是 filter 方法?

const foundItem = Boolean(items.length) && items.filter(item => item.price === 10)

有点等同于:

let foundItem;
if (!items.length) {
  foundItem = false;
} else {
  foundItem = items.filter(item => item.price === 10);
}

Array.prototype.filter的使用方法请参考MDN docs

const array2 = array1.filter(method)

这个 returns 一个新数组 (array2) 包含 array1 的所有元素,通过函数 method.[=20= 定义的“测试” ]

if(items.length){ // checking that array is empty or not
   for(let i = 0; i < items.length; i++){ // looping
     if(items[i].price === 10){ // checking all items price 10 not not
      foundItem.push( items[i]); // store 
   }
  }
 }

希望这段代码片段能帮助您理解。