JS在键值对数组中找到特定键

时间:2014-07-01 02:29:33

标签: javascript arrays key contains key-value

的JavaScript

var myArray = [{key: "key1", value: "value1"},{key: "key1", value: "value1"}];

是否有一种优雅的机制来确定" key1"存在 ?

换句话说,一个比迭代所有数组元素并检查每个数组元素更好的机制。

编辑:

(1)键不一定是唯一的

(2)数组必须由键值对组成,因为我需要将KVP子集提取到其他数组,重新排序,重复数据删除以及许多其他复杂操作

请重新打开这个问题,谢谢。

2 个答案:

答案 0 :(得分:2)

如果您正在使用支持函数式编程模式的其他库,则可以使用更优雅的方式表达迭代。

例如,使用Underscore

_.some(myArray, function(elem) {return elem.key == 'key1';});

并且cookie怪物正确地指出Underscore在这里根本没有必要,因为some()在1.6之后是Array上的本机:

myArray.some(function(elem) { return elem.key == 'key1';});

答案 1 :(得分:1)

  

换句话说,比迭代遍历所有数组更好的机制   元素并检查每一个。

可能不是,但您可以轻松过滤收藏品:

var coll = [{key: 'key1', value: 'value1'}
           ,{key: 'key1', value: 'value1'}
           ,{key: 'key2', value: 'value1'}]

var values = function(x) {
  return Object.keys(x).map(function(k){return x[k]})
}

var result = coll.filter(function(x) {
  return values(x).indexOf('key1') > -1
})

console.log(result)
//^ [{key: 'key1', value: 'value1'}
//  ,{key: 'key1', value: 'value1'}]

您可以通过比较原始集合和过滤集合的长度来检查所有项目是否具有该值:

if (result.length == coll.length) {
  // All objects have a key with value "key1"
}

或者您可以根据需要使用Array.prototype.everyArray.prototype.some