javascript - 如何过滤具有多个条件的数据的数组
问题描述
我有一个包含信息的数组。数据有一个我要过滤的标签属性。
如果数组包含数据,则应对数组中的所有数据触发过滤器。如果数组中没有数据,那么我从带有数据的数组中获取所有数据。
我需要控制数组长度为此我需要includes
在过滤器 30 后用于最大数据
//exist array with data
const arr = [
{ "value": "food", "tag": "food" },
{ "value": "drink1", "tag": "drink" },
{ "value": "drink2", "tag": "drink" },
{ "value": "empty tag data", "tag": null }
];
//example data from request with tags for filtering
const data1 = ["food", "drink"];
const data2 = [];
function example(arrayForSearch, needToFind) {
//not work o.tag.includes(needToFind, 30)
return arrayForSearch.reduce((a, o) => (o.tag.includes(needToFind) && a.push(o.value), a), []);
}
// result (0, 1, 2) indexes from array
console.log(example(arr, data1));
// result all data from array
console.log(example(arr, data2));
解决方案
您可以使用Array.filter()
退回您想要的项目。如果needToFind
为空,它将返回数组中的所有项目:
const arr = [
{ "value": "food", "tag": "food" },
{ "value": "drink1", "tag": "drink" },
{ "value": "drink2", "tag": "drink" },
{ "value": "empty tag data", "tag": null }
];
const data1 = ["food", "drink"];
const data2 = [];
function example(arrayForSearch, needToFind) {
// Return any item with a tag in the needToFind array _or_ if the needToFind array is empty.
return arrayForSearch.filter(el => needToFind.length === 0 || needToFind.includes(el.tag));
}
console.log('data1 result:', example(arr, data1));
console.log('data2 result:', example(arr, data2));
推荐阅读
- c# - 将 dapper 类传递给 postgres 存储过程
- javascript - 如何在没有原生 javascript 加入的情况下手动实现加入功能?
- mysql - Mysql :选择与之前(grouped_by)值不同的值
- c# - 共享 blazor 组件中的按钮和自定义事件处理程序列表
- swift - 如何从视频文件 Cocoa Swift 中获取图像缓冲区数组
- java - 矩形内的 BufferedImage 的渲染部分
- ios - iOS 13.4 当应用程序从前台网络转到后台时断开连接
- docker - mailu docker - 如何包含容器 id 来加密证书?
- python - 单击带有硒的特定按钮
- c++ - 用零填充向量