将数组与键对比JavaScript对象中的键

时间:2015-10-25 17:33:33

标签: javascript arrays angularjs object lodash

我有一个像["1", "5", "9"]这样的键的数组 我有一个具有相同键的对象,如下所示:selections: { "5": {}, "12": {} }

从中获取boolean值的最简单方法是什么? 如果我的对象中存在数组中的任何键,它应该返回true。 我正在使用角度和lodash,有没有任何智能解决方案或我需要为它做一个循环?如果我做一个循环,最有效的方法是什么?

5 个答案:

答案 0 :(得分:3)

您是否尝试使用hasOwnProperty()?

function check() {
  var selections = { "5": {}, "12": {} };
  return ["1", "5", "9"].filter(function(value) {
    return selections.hasOwnProperty(value);
  }).length > 0;
}

答案 1 :(得分:3)

'<?php echo $jsonencoded_array; ?>'

答案 2 :(得分:1)

只需一行代码:

var array = ["1", "5", "9"],
    obj = { "5": {}, "12": {} },
    any = array.some(function (a) { return a in obj; });
document.write(any);

答案 3 :(得分:0)

var keys = ["1", "5", "9"]; 
var selections = {"5": {}, "12": {}};   

function hasAnyKey(keys, selections) {
  for (var i = 0; i < keys.length; i++) {
    if (selections[keys[i]]) {
      return true;
    }
  }
  return false;
};

hasAnyKey(keys, selections);

此解决方案将在有1个匹配时立即返回,这相当于当至少有1个匹配时返回true,这就是您想要的。理论上,对于较大的输入,这将比Array.prototype.filter的解决方案更快。

答案 4 :(得分:0)

Array.prototype.some()为数组中的每个元素执行一次回调函数,直到找到一个回调返回true值的元素。 如果找到这样的元素,some()会立即返回true。 否则,some()会返回false。 Array.prototype.some()位于ECMAScript 1.5,应该可以在任何地方使用。

&#13;
&#13;
function compareArrayToObject(array, obj) {
    return array.some(function (a) { return a in obj; });
}
var array = ["1", "5", "9"];
var obj = { "5": {}, "12": {} };
var result = compareArrayToObject(array, obj);
document.write(result);
&#13;
&#13;
&#13;