JavaScript
var myArray = [{key: "key1", value: "value1"},{key: "key1", value: "value1"}];是否有一种优雅的机制来确定"key1“是否存在?
换句话说,这是一种比迭代所有数组元素并检查每个数组元素更好的机制。
编辑:
(1) key不一定唯一
(2)数组必须由键-值对组成,因为我需要将KVP子集提取到其他数组中,进行重新排序、去重和许多其他复杂操作
请重新打开此问题,谢谢。
发布于 2014-07-01 10:46:32
如果您正在使用一个支持函数式编程模式的附加库,那么有一些更优雅的方式来表达迭代。
例如,使用Underscore
_.some(myArray, function(elem) {return elem.key == 'key1';});cookie monster正确地指出,这里根本不需要下划线,因为some()是从1.6开始在数组上原生的:
myArray.some(function(elem) { return elem.key == 'key1';});发布于 2014-07-01 10:39:06
换句话说,这是一种比迭代所有数组元素并检查每个数组元素更好的机制。
可能不会,但你可以很容易地对集合进行过滤:
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.every或Array.prototype.some。
https://stackoverflow.com/questions/24501654
复制相似问题