首页 > 解决方案 > 如何过滤具有多个条件的数据的数组

问题描述

我有一个包含信息的数组。数据有一个我要过滤的标签属性。

如果数组包含数据,则应对数组中的所有数据触发过滤器。如果数组中没有数据,那么我从带有数据的数组中获取所有数据。

我需要控制数组长度为此我需要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));

标签: javascriptarraysfilter

解决方案


您可以使用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));


推荐阅读