我在javascript(Jquery 3.2)中有两个数组。一个数组(源)具有键值对,而另一个(目标)仅具有值。我想从其他(目标)数组中具有匹配值的源返回那些键值。 这是数组。
var source = [{ "a": 3 }, { "b": 2 }, { "c": 1 },{"k":12}];
var target = ["a", "b", "c","d"];
答案 0 :(得分:2)
您可以通过检查每个源项目中的第一个键来基于目标过滤源。但这假设源项目只有一个密钥。如果有{a: 3, d:4}
之类的项目,则将失败。
var source = [{ "a": 3 }, { "b": 2 }, { "c": 1 }, {"k":12}];
var target = ["a", "b", "c","d"];
let filtered = source.filter(item => target.includes(Object.keys(item)[0]))
console.log(filtered)
答案 1 :(得分:1)
var source = [{ "a": 3 }, { "b": 2 }, { "c": 1 },{"k":12}];
var target = ["a", "b", "c","d"];
console.log(
//filter the sources on the target values
source.filter(function(element){
//should show the element, if the key is in the target list
return target.indexOf(Object.keys(element)[0]) > -1;
})
);
答案 2 :(得分:1)
执行此操作的方法有所不同。其中一个使用过滤器的方法如下:
var source = [{ "a": 3 }, { "b": 2 }, { "c": 1 },{"k":12}];
var target = ["a", "b", "c","d"];
var filteredArray = source.filter(function(array_el){
return target.filter(function(target_el){
return target_el == Object.keys(array_el);
}).length > 0
});
console.log(filteredArray);
答案 3 :(得分:1)
一个选择是在目标上使用set
,这将使检查集has
是否为某个元素变得更加容易。使用filter
过滤source
数组。
var source = [{ "a": 3 }, { "b": 2 }, { "c": 1 },{"k":12}];
var target = ["a", "b", "c", "d"];
var tempSet = new Set(target);
var result = source.filter(o => tempSet.has(Object.keys(o)[0]));
console.log(result);