开发者问题收集

过滤数组中的元素

2021-08-26
43

我正在使用 React Native。我有一份食物类别列表:

  const categoryData = [
{
  id: 1,
  name: "Burger",
  icon: icons.burger,
},
{
  id: 2,
  name: "Salat",
  icon: icons.salad,
},
{
  id: 3,
  name: "Drinks",
  icon: icons.drinks,
}];

和一家选定的餐厅:

  const selectedRestaurant = {
  id: 1,
  name: "Tom's Burger",
  rating: 4.8,
  categories: [1, 3],
};

我想要一个数组 offeredCategories ,其中只包含餐厅提供的类别。在这种情况下,只应显示汉堡和饮料类别。

我尝试过滤 categoryData 并使用了以下内容,但它说 includes 不是一个函数。还有其他选择吗?

const offeredCategories = categoryData.filter((item) => item.id.includes(selectedRestaurant.categories))
2个回答

Array includes 一个特定值,因此是您的 selectedRestaurant.categories ,而不是您的 item.id

const icons = {};
const categoryData = [{
    id: 1,
    name: "Burger",
    icon: icons.burger,
  },
  {
    id: 2,
    name: "Salat",
    icon: icons.salad,
  },
  {
    id: 3,
    name: "Drinks",
    icon: icons.drinks,
  }
];

const selectedRestaurant = {
  id: 1,
  name: "Tom's Burger",
  rating: 4.8,
  categories: [1, 3],
};

const offeredCategories = categoryData.filter((item) =>  
  selectedRestaurant.categories.includes(item.id)
);

console.log(offeredCategories);
Roko C. Buljan
2021-08-26

此内容取自 MDN Web Docs :

The includes() method determines whether an array includes a certain value among its entries, returning true or false as appropriate.

在您的代码中,您尝试对整数而不是数组使用 includes 方法。

编辑:

这应该允许您过滤掉类别。

const offeredCategories = categoryData.filter((item) => selectedRestaurant.categories.includes(item.id))

唯一的问题是您正在检查一个项目以查看它是否包含一个数组,而 includes 语句正在检查一个数组以查看它是否包含一个项目。

Mal1t1a
2021-08-26