使用Javascript的高级Array.prototype.filter

时间:2016-04-01 22:06:35

标签: javascript arrays filter

我有一个像这样的Javascript对象......

var strategies = [{
    "strategy": {
        "category": "war"
    }
}, {
    "strategy": {
        "category": "farming"
    }
}]

然后我有一个数组,表明我想要回复哪些结果。它可以是以下任何一项:[]["war"] ["farming"]["war", "farming"]

如果我们有[],我想不返回任何结果。但如果["war", "farming"]我想要返回上述两个结果。

如何使用Array.prototype.filter完成此操作?我看到了this post,但无法推理它。

strategies.filter((strategy) => 
  ????
)

感谢您的帮助。

3 个答案:

答案 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'])

DEMO