-1

我有一个看起来像这样的数组:

在此处输入图像描述

我需要 id 在哪里slug === 'slug'

let activeFaq = this.faq.filter(obj => obj.items.filter(item => item.slug === 'slug'));
console.log(activeFaq.id);

这给了我一个未定义的。我应该得到 2729

4

3 回答 3

2

有多种方法可以解决这个问题。如果可以使用.flatMap,那么一种解决方案是将所有项目展平为一个数组,然后使用.find

const item = this.faq.flatMap(obj => obj.items).find(item => item.slug === 'slug')

然而,扁平化似乎有点不必要。避免不必要计算的一种方法是使用带有无聊循环的辅助函数:

function findItem(faqs, callback) {
  for (const faq of faqs) {
    const item = faq.find(callback);
    if (item) {
      return item;
    }
  }
}


const activeFaq = findItem(this.faq, item => item.slug === 'slug');
于 2020-04-29T12:14:24.813 回答
0
var activeFaq = this.faq.filter(obj => obj.items.some(item => item.slug === 'slug'))[0];
console.log(activeFaq.items[0].id); //2729
于 2020-04-29T12:11:55.650 回答
0
let activeFaq = this.faq.reduce( ( obj ) => {
  const foundItem = obj.items.find( ( item ) => {
     return item.slug === 'slug'
  } )

  if( foundItem ) {
    acc = foundItem
  }

  return acc

}, null )

console.log(activeFaq.id);
于 2020-04-29T12:19:59.700 回答