繁体   English   中英

Javascript检查数组中的现有对象

[英]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.

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