根据数组值获取子数组

5

我有一个 categories 数组:

{id: 1, catName: "test", subCategories: Array(2)}

根据 categoryid,我需要检索出 subCategories 数组。

下面的代码会返回整个 category 对象,如何修改代码使其只返回 subCategories 数组呢?

  const subCategories = categoriesWithSub.filter(category => {
    return category.id === departments.catId;
  });

我有一个类别数组...它看起来像是一个对象,而不是一个数组。 - hindmost
5个回答

5

解构一个 find 调用:

const { subCategories } = categoriesWithSub.find(({ id }) => id === departments.catId);

2
使用 Array#find 获取对象,然后使用 点符号或方括号符号 获取数组。
const subCategories = (categoriesWithSub.find(category => {
  return category.id === departments.catId;
}) || {}).subCategories; // if find returns undefined then use an empty object to avoid error, alternately you can use if condition

2
你可以使用reduce。最初的回答。
const subCategories = categoriesWithSub.reduce((acc, category) => {
  if (category.id === departments.catId) {
    return acc.concat(category. subCategories)
  }
  return acc;
}, []);

顺便提一下,reduce是一个非常强大的工具。 findmapforEachfilter都像是针对特定任务的reduce的速记版本。


2
尝试这个:

试试这个:

let categories = [ {id: 1, catName: "test", subCategories: ["test1","test2"]}, {id: 2, catName: "test", subCategories: Array(2)} ]
let departments = { catId: 1 }
const subCategories = categories.find(category => {
    return category.id === departments.catId;
  }).subCategories;
console.log( subCategories );


filter会返回一个数组,因此subCategories将未定义。[0].subCategories;这样做就可以了,但是你需要确保filter始终产生结果。 - Tim VN

0

试试这个

function getSubCategory() {
        var categoriesWithSub = [{ id: 1, catName: "test", subCategories: ["test1","test2"] }, { id: 2, catName: "test", subCategories: ["test1","test2"] }]
        var catId = 1;

        for (var category = 0; category < categoriesWithSub.length; category++) {
             if (categoriesWithSub[category].id == catId)
                return categoriesWithSub[category].subCategories;
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接