[英]Javascript check for existing object in Array
我在数组中有一些简单的对象。 我只想基于对象属性将新对象添加到数组中(如果它们尚未添加到其中)。
var o = {text: 'foo'}
var a = [o]
var checkExisting = function (list, obj) {
list.forEach(function(elem) {
if (elem.text === obj) {
return true
}
}
}
checkExisting(a, 'foo')
这行不通。 我不知道为什么。 任何帮助或替代方案将是巨大的。
因为您无法从forEach
callback
return
值,所以可以使用for
,就像这样
var checkExisting = function (list, obj) {
for (var i = 0, len = list.length; i < len; i++) {
if (list[i].text === obj) {
return true;
}
}
}
可以使用.every()
来完成此操作,因为.forEach()
始终返回undefined。 因此,您也无法将其链接。
.every()
对.forEach()
类的每个元素都运行一个方法,但是如果接收到错误值,它将中止。 最后,如果每次迭代都返回true,则它将对调用者返回true,否则将返回false。
因为我们返回false使其在找到值时中止(因此它不会继续迭代),所以我们必须翻转它返回的值,然后再从checkExisting
返回它。
因此,使用该代码,您可以执行以下操作:
var checkExisting = function (list, obj) {
return !list.every(function(elem) {
return elem.text !== obj;
});
}
显然,如果对象没有属性文本等,则必须将其扩展为错误处理。请参见小提琴: http : //jsfiddle.net/reLsqhkm/和文档: https : //developer.mozilla.org/zh- US / docs / Web / JavaScript / Reference / Global_Objects / Array /每
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.