首页 > 解决方案 > 在 NodeJS 中过滤数据

问题描述

我有一个 json 数组,其中包含一个具有名称和评级字段的对象。我想过滤评级为 5 的数组。这可能很容易找到,但我被卡住了。下面是我的 json 对象。

let products = [
{
  "name" : "product 1",
  "rating" : 5   
},
{
  "name" : "product 2",
  "rating" : 4
},
{
  "name" : "product 3",
  "rating" : 5
},
{
  "name" : "product 4",
  "rating" : 2
}]

在这里,我正在使用过滤器功能,但无法获得如何正确使用它。

这是我写的功能,但它不起作用。

const prod = (products) => {

    products.filter((proct) => {
        if(proct === 5){
          console.log(proct.name);
        }
    });
}

prod(products);

有人让我知道我做错了什么。

标签: javascriptarrays

解决方案


filter函数必须返回一个布尔值作为结果

函数是一个谓词,用来测试数组的每个元素。返回一个值,该值强制为 true 以保留元素,否则返回 false。

Array.prototype.filter

let products = [{ "name": "product 1", "rating": 5 }, { "name": "product 2", "rating": 4 }, { "name": "product 3", "rating": 5 }, { "name": "product 4", "rating": 2 } ]

products = products.filter(({rating}) => rating === 5)

console.log(products)

数组中的每个项目都是一个对象,我猜您正在寻找rating===5

你的功能应该是:

let products = [{ "name": "product 1", "rating": 5 }, { "name": "product 2", "rating": 4 }, { "name": "product 3", "rating": 5 }, { "name": "product 4", "rating": 2 } ]

const prod = (products) => {
  products.filter((proct) => {
    if (proct.rating === 5) {
      console.log(proct.name);
      return true;
    }
    return false
  });
}

prod(products)


获取name密钥:

看一下从旧数组创建新数组的map函数:

.map(({name}) => name)

完整代码:

let products = [{ "name": "product 1", "rating": 5 }, { "name": "product 2", "rating": 4 }, { "name": "product 3", "rating": 5 }, { "name": "product 4", "rating": 2 } ]

products = products.filter(({rating}) => rating === 5).map(({name}) => name)

console.log(products)


推荐阅读