如何在JS中检查对象数组是否包含一个对象?

时间:2015-09-08 16:21:31

标签: javascript arrays

我有这段代码:

x <- c(Char1, Char2, Char3)
y <- c(Char4, Char5, Char6)
Expected output...
(Char1[Char4], Char2[Char5], Char3[Char6])

为什么控制台日志始终打印-1? Users数组包含带有属性username的对象的数组:“admin:和password:”admin“。

3 个答案:

答案 0 :(得分:1)

indexOf方法使用严格等于(===)。当您使用{foo: bar}时,您将创建一个新的(唯一)对象,该对象的评估不会严格等于数组中已有的任何内容。

你应该做的是遍历数组并使用函数来使用深度相等来比较每个对象。简单地说,你可以使用类似的东西:

function match(arr, ref) { // Take an array and a reference object
  return arr.filter(function (cur) { // Select any items in the array...
    return Object.keys(ref).every(function (key) { // Where all keys...
      return ref[key] === cur[key]; // Have the same value in the item and reference
    });
  });
}

答案 1 :(得分:0)

在这里查看indexOf 请记住,在客户端管理密码存在安全漏洞。

答案 2 :(得分:0)

this.isExist = function(user) {
    console.log(users.indexOf({
        username: "admin",
        password: "admin"
    }));
};

这里的问题是您要检查用户数组是否包含您正在创建的新对象。由于它是一个新对象,它显然不会包含它。您需要检查用户对象是否包含任何用户名或密码等于&#34; admin&#34;的对象。也许像是

this.isExist = function(user) {
    for(var x = 0; x < users.length; x++) {
        var current = users[x];
        if(current.username === user.username && current.password === user.password) {
            return true;
        }
    }

    return false;
};

或者,您也可以简单地使用Linq.js,这对这类查询有很大帮助。它是我最喜欢的图书馆之一。

https://linqjs.codeplex.com/