如果包含键值对,则返回数组中的对象

时间:2017-02-24 11:11:57

标签: javascript arrays loops object properties

如果数组中的对象包含特定的键值对,如何返回它?

如果它具有给定的所有键值对,我需要返回它,而不仅仅是一个。

例如,

此函数将对象数组作为第一个参数,将给定键值对作为第二个参数的对象

whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }); 

应该返回

[{ "a": 1, "b": 2 }, { "a": 1, "b": 2, "c": 2 }]

4 个答案:

答案 0 :(得分:1)

您可以使用filter()every()执行此操作。

function whatIsInAName(a, b) {
  return a.filter(function(e) {
    return Object.keys(b).every(function(c) {
      return e[c] == b[c]
    })
  })
}

console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 })) 

答案 1 :(得分:1)

使用 underscore.js 。这很简单。

function whatIsInAName(a, b){
	return _.where(a, b);
}
var data = whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 });

console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

答案 2 :(得分:0)

Array#filter方法使用Array#every方法。

function whatIsInAName(arr, obj) {
  // get the keys array
  var keys = Object.keys(obj);
  // iterate over the array
  return arr.filter(function(o) {
    // iterate over the key array and check every property
    // is present in the object with the same value 
    return keys.every(function(k) {
      return obj[k] === o[k];
    })
  })
}


console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }));

答案 3 :(得分:0)

您可以通过检查模式的键和值来过滤数组。

function whatIsInAName(array, pattern) {
    var keys = Object.keys(pattern);
    return array.filter(function (o) {
        return keys.every(function (k) {
            return pattern[k] === o[k];
        });
    });
}

console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }));