繁体   English   中英

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

[英]Compare an array with keys to keys in an object JavaScript

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

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

你尝试使用hasOwnProperty()吗?

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

array.some(key => selections.hasOwnProperty(key));

只需一行代码:

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

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的解决方案更快。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM