你误解了.indexOf()。indexOf返回可以在数组中找到给定元素的第一个索引,或者-1如果它不存在。inindex的索引也是如此。简而言之,您将对象 ( ) 与数字 ( ) 进行比较。countercounterscounterindex
也就是说,它还取决于您在数组中搜索对象的方式。如果尝试查找与某个键/值结构匹配的对象,.indexOf由于您提到的原因将不起作用。正如 Gabriele 所指出的,如果使用参考进行搜索,它将起作用。
如果使用引用不是一种选择,作为替代,您可以使用.findIndex(), 或.map(),并根据其属性之一查找对象,例如id.
const counters = [{id: 1, value: 0}, {id: 2, value: 0}, {id: 3, value: 0}, {id: 4, value: 0}];
const findBySameness = {id: 3, value: 0};
const findByRef = counters[2];
const indexBySameness = counters.indexOf(findBySameness);
console.log('Index by sameness: ', indexBySameness); // Do not find the object index
const indexByRef = counters.indexOf(findByRef);
console.log('Index by reference: ', indexByRef); // Found the object index
// If a reference to the object is not available you can use the following methods
// With .findIndex
const index3 = counters.findIndex(item => item.id === findBySameness.id)
console.log('Index: ', index3); // Found the object index
// With .map
const index2 = counters.map(item => item.id).indexOf(findBySameness.id);
console.log('Index: ', index2); // Found the object index
倚天杖
相关分类