找出JavaScript数组是否包含值的最简洁有效的方法是什么?
这是我知道的唯一方法:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
有没有更好、更简洁的方法来实现这一点?
这与堆栈溢出问题密切相关。在JavaScript数组中查找项目的最佳方法是什么?它解决了使用indexOf查找数组中的对象的问题。
使用lodash的一些功能。
它简洁、准确,并且具有强大的跨平台支持。
接受的答案甚至不符合要求。
要求:推荐最简洁有效的方法来确定JavaScript数组是否包含对象。
接受答案:
$.inArray({'b': 2}, [{'a': 1}, {'b': 2}])
> -1
我的建议:
_.some([{'a': 1}, {'b': 2}], {'b': 2})
> true
笔记:
$.inArray可以很好地确定标量数组中是否存在标量值。。。
$.inArray(2, [1,2])
> 1
…但这个问题显然需要一种有效的方法来确定数组中是否包含对象。
为了处理标量和对象,可以执行以下操作:
(_.isObject(item)) ? _.some(ary, item) : (_.indexOf(ary, item) > -1)
类似的事情:通过“search lambda”查找第一个元素:
Array.prototype.find = function(search_lambda) {
return this[this.map(search_lambda).indexOf(true)];
};
用法:
[1,3,4,5,8,3,5].find(function(item) { return item % 2 == 0 })
=> 4
咖啡脚本也一样:
Array.prototype.find = (search_lambda) -> @[@map(search_lambda).indexOf(true)]
检查数组JavaScript中是否存在值的最佳默认方法是some()
Array.prototype.some()
some()方法测试数组中是否至少有一个元素通过了所提供函数实现的测试。如果在数组中找到所提供的函数返回true的元素,则返回true;否则返回false。它不会修改数组。
const array = [1, 2, 3, 4, 5];
// checks whether an element is even
const even = (element) => element % 2 === 0;
console.log(array.some(even));
// expected output: true
some方法是浏览器兼容性中最好的方法
有关更多文档Array.prototype.some()-JavaScript | MDN
您还可以使用另外两个方法:find()和includes()。用这些方法你可以得到你的结果,但不是最好的。
Array.prototype.find()-JavaScript | MDN
Array.prototype.includes()-JavaScript | MDN