找不到Javascript indexOf对象

Javascript indexOf object not found

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

这是我正在使用的代码,它返回-1,所以找不到它。但是它在那里

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

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

enter

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

所以我不明白为什么这会带来负面结果


数组indexOf使用严格等于(===)

so

1
2
3
4
5
6
7
8
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

所以这取决于您要查找的对象与数组中的对象的相关性


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

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

indexOf像这样进行比较,因此找不到任何内容。

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

或ecmascript 2015 Array.prototype.find方法


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

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

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


您需要一个类似以下内容的自定义函数:在其中传递要搜索的数组,要为其查找索引的对象以及该对象的唯一属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
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');

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

意思是如果数组member !== theUserYouAreLookingFor中的每个条目都将返回-1(变量不持有对同一对象的引用,而不是对内存中相同对象的引用) 。


如果从未发生,则返回-1。

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


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

如果未发现此事件,则函数返回-1。

有关更多信息,请访问此网站:

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