如何实现用数组对数组进行筛选?

需求如下:

let showArr = [{

            malltype: '旗舰店',
            symbol: 'R标',
            region: '华南地区',
            industry: '美容护理',
            price: '5万-10万'
        }, {
            malltype: '旗舰店',
            symbol: 'R标',
            region: '华南地区',
            industry: '服饰鞋包',
            price: '5万-10万'
        }, {
            malltype: '旗舰店',
            symbol: 'R标',
            region: '华南地区',
            industry: '游戏话费',
            price: '5万-10万'
        }] //筛选对象

let reqArr = ['旗舰店', '服饰鞋包'] //筛选条件value,且不确定对应的属性

输出:[{

malltype: '旗舰店',
symbol: 'R标',
region: '华南地区',
industry: '服饰鞋包',
price: '5万-10万'

}]

目前已有的一个思路:

let temp = [];

let cache;

    reqArr.forEach(function(item, index) {
        showArr.forEach(function(sub) {
            cache = Object.values(sub)

            cache.forEach(function(part, count) {

                if (part == item) {
                    // console.log(item)
                    temp = [];

                    temp.push(sub)
                }
            })
        })
    })
    

console.log(temp);

阅读 2.5k
2 个回答
function find(source, target) {
    var ret = [];
    if (Array.isArray(source) && Array.isArray(target)) {
        if (!target.length) return source;
        for (var i = 0; i < source.length; ++i) {
            var obj = source[i];
            var arr = target.slice();
            for (var key in obj) {
                var val = obj[key];
                var index = arr.indexOf(val);
                if (index in arr) arr.splice(index, 1);
            }
            if (!arr.length) ret.push(obj);
        }
    }
    return ret;
}
console.log(find(showArr, reqArr));
const pick = (source, values) => source.filter(srcItem => values.every(val => Object.values(srcItem).includes(val)))

pick(showArr, reqArr)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题