Javascript indexOf object not found
我正在尝试在Javascript数组中查找对象的索引。
这是我正在使用的代码,它返回-1,所以找不到它。但是它在那里
1 | var index = this.state.users.indexOf(user); |
我要比较的对象与集合中的对象相同,如下图所示
我正在使用此代码比较两者
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 |
要查找与给定数组相同的对象,可以使用Array.prototype.filter方法。
或ecmascript 2015 Array.prototype.find方法
因为在JavaScript中,
在您的环境中,您还会发现
因此,您用于比较的方法不正确。
您需要一个类似以下内容的自定义函数:在其中传递要搜索的数组,要为其查找索引的对象以及该对象的唯一属性:
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数组中查找成员。
意思是如果数组
如果从未发生,则返回-1。
http://www.w3schools.com/jsref/jsref_indexof.asp
IndexOf函数用于查找在另一个字符串中出现的字符串。
如果未发现此事件,则函数返回-1。
有关更多信息,请访问此网站:
http://www.w3schools.com/jsref/jsref_indexof.asp