找不到Javascript indexOf对象

时间:2015-08-05 11:45:14

标签: javascript reactjs indexof

我正在尝试在Javascript中找到数组内对象的索引。

这是我正在使用的代码,这会返回-1,因此找不到它。但它就在那里

var index = this.state.users.indexOf(user);

我正在比较的对象与集合中的对象相同,如下图所示

enter image description here

我正在使用此代码来比较两个

console.log(this.state.users[0]);
console.log(member);

所以我不明白为什么会给出负面结果

7 个答案:

答案 0 :(得分:2)

在javascript对象中通过引用进行比较,例如

var obj1 = {prop: 0};
var obj2 = {prop: 0};
alert(obj1 === obj2); //false

indexOf这样比较,所以找不到任何东西。

要查找数组相同中的对象,您可以使用Array.prototype.filter方法。

或ecmascript 2015 Array.prototype.find方法

答案 1 :(得分:2)

数组indexOf使用STRICT EQUALITY(===)

所以

var v1 = {id:1, info:{something:'else'}};
var v2 = {id:2, info:{something:'else'}};
var v3 = {id:1, info:{something:'else'}};
var v4 = v2;
var arr = [v1, v2];
arr.indexOf(v2); // 1
arr.indexOf(v3); // -1
arr.indexOf(v4); // 1

即使v3看起来像v1,也不是v1

所以它取决于你试图找到的对象与数组中对象的关系

答案 2 :(得分:0)

IndexOf函数用于在另一个字符串中查找字符串的出现次数。

如果未找到此情况,则函数返回-1。

请参阅本网站了解更多信息:

http://www.w3schools.com/jsref/jsref_indexof.asp

答案 3 :(得分:0)

如果永远不会发生,则返回-1。

http://www.w3schools.com/jsref/jsref_indexof.asp

答案 4 :(得分:0)

它使用严格比较来查找users数组中的成员。

这意味着如果对于数组-1中的每个条目,它将返回member !== theUserYouAreLookingFor(当变量不保持对同一对象的引用时,情况就是这样,不相似但相同记忆中的物体。)

答案 5 :(得分:0)

你需要一个类似这样的自定义函数,在其中传递要搜索的数组,要查找索引的对象以及对象的唯一属性: / p>

var indexOfArrayObject = function(arr, obj, prop) {
    var index = -1;
    arr.some(function(val, ind){
        if(val[prop] === obj[prop]) {
            index = ind;
            return true;
        }
    });
    return index;
}

// Getting the index by 'id'
var userIndex = indexOfArrayObject(this.state.users, user, 'id');

答案 6 :(得分:0)

因为在JavaScript中,{ a: 1 } === { a: 1 }{ a: 1 } == { a: 1 } false

在您的环境中,您还会发现this.state.users[0] === member 错误

因此,您用于比较的方法不正确。