在https://recoiljs.org/docs/basic-tutorial/atoms,它们使用const index = todoList.findIndex((listItem) => listItem === item);
以获取数组中对象的索引。代码有效,但我无法复制它,我总是得到-1的返回值。我以为你不能像那样直接比较物体todoList
类似于:
[{id: 0, text: 'item1', isComplete: false}, {id: 1, text: 'item2', isComplete: false}]
其中item
是{id: 0, text: 'item1', isComplete: false}
它们的使用逻辑如下:
const a = {};
const b = [];
b.push(a);
b.findIndex(el=>el===a); // 0
如果您自己定义列表:
[{id: 0, text: 'item1', isComplete: false}, {id: 1, text: 'item2', isComplete: false}]
您应该使用id || text || isComplete
来查找索引,因为您没有指向要查找的对象的链接。关于对象比较的更多信息https://dmitripavlutin.com/how-to-compare-objects-in-javascript/
您想象===
通过值比较对象,而实际上它通过reference进行比较,请参见下文。
const todoList = [];
const item = {id: 0, text: 'item1', isComplete: false};
todoList.push(item);
// Attempt by reference, 0
console.log(todoList.findIndex((listItem) => listItem === item));
// Attempt by value, -1
console.log(todoList.findIndex((listItem) => listItem === {id: 0, text: 'item1', isComplete: false}));