ES6-如何通过使用Java脚本过滤来返回嵌套对象属性值

时间:2018-08-07 18:15:17

标签: javascript filter ecmascript-6

基于过滤器查找嵌套对象属性值

请提出识别给定商品ID 03的名称的最佳方法。

const product = products.find(product => product.items.some(item => item.id === '03'));

提供产品,但将不得不再次循环以找到名称?

    const products = [
      {
        id: 'p1',
    items: [
      {
        id: 01,
        name: 'iphone'
      },
      {
        id: 02,
        name: 'samsung'
      },
      {
        id: 03,
        name: 'oneplus'
      }
    ]
      },
      {
    id: 'p2',
    items: [
      {
        id: 04,
        name: 'nokia'
      },
      {
        id: 05,
        name: 'nexus'
      },
      {
        id: 06,
        name: 'phone3'
      }
    ]
  }
    ]
  }
]

2 个答案:

答案 0 :(得分:0)

我想要:

const product = products
  .reduce((acc, product) => {
    return [...acc, ...product.items];
  }, [])
  .find(item => item.id === "03");
const productName = product && product.name;
console.log(productName); // oneplus

答案 1 :(得分:0)

由于您似乎担心性能,并且似乎只有一个匹配的id,经典的for循环最适合此任务。

let matchingItem;
for (let i = 0; i < products.length; i++){
    const product = products[i];
    matchingItem = product.items.find(item => item.id === "03");
    if (matchingItem) {
        break;
    }
}

这不是很花哨,但是一旦找到匹配项就可以立即停止执行,这是最佳选择。