我正在尝试在Javascript中找到数组内对象的索引。
这是我正在使用的代码,这会返回-1,因此找不到它。但它就在那里
var index = this.state.users.indexOf(user);
我正在比较的对象与集合中的对象相同,如下图所示
我正在使用此代码来比较两个
console.log(this.state.users[0]);
console.log(member);
所以我不明白为什么会给出负面结果
答案 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。
请参阅本网站了解更多信息:
答案 3 :(得分:0)
如果永远不会发生,则返回-1。
答案 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
错误。
因此,您用于比较的方法不正确。