javascript - 在 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);
有人让我知道我做错了什么。
解决方案
filter
函数必须返回一个布尔值作为结果
函数是一个谓词,用来测试数组的每个元素。返回一个值,该值强制为 true 以保留元素,否则返回 false。
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)
推荐阅读
- python - 出现语法错误时如何防止flask docker容器退出?
- javascript - 未捕获的类型错误:更新状态时无法分配给只读属性
- django - 有没有办法让 URL 只能通过同一来源访问
- tensorflow - 在 IONIC 上的 Android Projetct 注册表中找不到后端
- java - 在 selenium webdriver 中,实际文本是“Indian”,但 element.getText() 正在获取“Indian”
- c++ - 如何以编程方式禁用/启用 CMFCTasksPane 中的任务而不完全隐藏它们?
- java - how to send multiple ArrayList from a Servlet to JSP without using JSTL
- python - NameError: name 'price' is not defined
- c - 与父母一起杀死分叉的子进程?
- excel - Excel重复行