我正在寻找最快,最优雅的方式来做到这一点。我已经看到了类似的问题,他们都非常具体地解决问题。我对Lodash很新,而且我主要使用_.find。我不知道如何使用_.filter来获得我想要的东西,一个只有过滤后的返回的新JSON数组:
我要过滤的数组:
var mod1 = [{"Codigo" : "001", "Valor" : "Rojo"},
{"Codigo" : "002", "Valor" : "Blue"},
{"Codigo" : "003", "Valor" : "Grey"},
{"Codigo" : "004", "Valor" : "Green"},
{"Codigo" : "005", "Valor" : "Pink"},
{"Codigo" : "006", "Valor" : "Gold"},
{"Codigo" : "007", "Valor" : "Black"},
{"Codigo" : "008", "Valor" : "White"},
{"Codigo" : "009", "Valor" : "Magenta"},
{"Codigo" : "010", "Valor" : "Marine Blue"},
{"Codigo" : "011", "Valor" : "Orange"}];
我在控制器中的功能,prod是单个产品的JSON,其中包含5个修饰符。每个修饰符的上述完整列表存储在本地,而另一个接收则通过Web服务进行过滤。要过滤掉的值只是“代码”,我从webservice收到的字符串是用逗号分隔的字符串。
$scope.mod11 = Productos.getMod1(prod.mod1);
我实际收到的过滤内容如下:
"mod1":"001, 002, 005"
这是我过滤的可怕尝试:
getMod1: function(mods) {
return _.filter(mod1, angular.fromJson(mods));
/*return mod1;*/
}
我尝试了几种不同的方式,包括对mod进行拆分(',)。我只需要将字符串中的所有Codigo ==任意值带回来。
编辑:我在这个特殊情况下寻找的最终结果对于$ scope.mod11来说是这样的
[{"Codigo" : "001", "Valor" : "Rojo"},
{"Codigo" : "002", "Valor" : "Blue"},
{"Codigo" : "005", "Valor" : "Pink"}]
答案 0 :(得分:1)
根据我的理解:
var mod1 = [{"Codigo" : "001", "Valor" : "Rojo"},
{"Codigo" : "002", "Valor" : "Blue"},
{"Codigo" : "003", "Valor" : "Grey"},
{"Codigo" : "004", "Valor" : "Green"},
{"Codigo" : "005", "Valor" : "Pink"},
{"Codigo" : "006", "Valor" : "Gold"},
{"Codigo" : "007", "Valor" : "Black"},
{"Codigo" : "008", "Valor" : "White"},
{"Codigo" : "009", "Valor" : "Magenta"},
{"Codigo" : "010", "Valor" : "Marine Blue"},
{"Codigo" : "011", "Valor" : "Orange"}];
var response = {mod1: "001, 002, 005"};
var keys = response.mod1.split(', ');
var arr =[];
for(var i=0;i<mod1.length;i++){
if (keys.indexOf(mod1[i].Codigo) > -1) {
arr.push(mod1[i])
}
}
console.log(arr)
输出:
Run in console.
答案 1 :(得分:1)
使用lodash _.filter和 _.includes的优雅解决方案:
var codes = "001, 002, 005".split(', ');
getMod1: function(){
return _.filter(mod1, function(c){
return _.includes(codes, c.Codigo);
})
}
答案 2 :(得分:0)
最快的是@ softvar的解决方案。 如果您正在寻找优雅,可能就是这样:
var codes = "001, 002, 005".split(', ');
var mods = _(mod1).indexBy("Codigo").pick(codes).values().value();