我有一个像这样的Javascript对象......
var strategies = [{
"strategy": {
"category": "war"
}
}, {
"strategy": {
"category": "farming"
}
}]
然后我有一个数组,表明我想要回复哪些结果。它可以是以下任何一项:[]
或["war"]
["farming"]
或["war", "farming"]
。
如果我们有[]
,我想不返回任何结果。但如果["war", "farming"]
我想要返回上述两个结果。
如何使用Array.prototype.filter完成此操作?我看到了this post,但无法推理它。
strategies.filter((strategy) =>
????
)
感谢您的帮助。
答案 0 :(得分:4)
您只需使用indexOf
检查值:
var categories = ['war', 'farming'];
var filtered = strategies.filter((obj) => {
return categories.indexOf(obj.strategy.category) > -1;
});
答案 1 :(得分:1)
您的对象,策略是一个包装对象,所以我的第一行是将其设置为内部策略,然后根据需要进行过滤。
var strategies = [{
"strategy": {
"category": "war"
}
}, {
"strategy": {
"category": "farming"
}
}]
var b = ["war", "farming"];
strategies.filter(function(strategy){
strategy = strategy.strategy;
for(var i in b){
if (b[i] == strategy["category"]) {
return true;
}
}
return false;
});
答案 2 :(得分:1)
根据您的要求测试输入数组以查看它是否为空:
function filterObj(arr) {
return !arr.length ? arr :
strategies.filter((el) => arr.indexOf(el.strategy.category) > -1);
}
filterObj(['war', 'farming'])