Javascript检查Array中的现有对象

时间:2015-10-09 11:22:41

标签: javascript arrays

我在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')

这不起作用。我无法弄清楚为什么。任何帮助或替代方案都会很棒。

2 个答案:

答案 0 :(得分:4)

因为您无法return来自callbackforEach的价值,您可以使用for,就像这样

var checkExisting = function (list, obj) {
    for (var i = 0, len = list.length; i < len; i++) {
        if (list[i].text === obj) {
            return true;
        }
    }
}

答案 1 :(得分:1)

这可以与.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/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every