如何在目标数组值内匹配javascript源数组键

时间:2018-07-27 15:37:56

标签: javascript jquery arrays

我在javascript(Jquery 3.2)中有两个数组。一个数组(源)具有键值对,而另一个(目标)仅具有值。我想从其他(目标)数组中具有匹配值的源返回那些键值。 这是数组。

var source = [{ "a": 3 }, { "b": 2 }, { "c": 1 },{"k":12}];
var target = ["a", "b", "c","d"];

4 个答案:

答案 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);