我有一个来自 ajax 响应
中服务器的列表,其结构如下:
var mapping = [ //response.mapping
["userOne", 1],
["userTwo", 2],
["userthree", 3],
["userfour", 4],
["personOne", 1],
["personTwo", 2],
["personOne", 3],
];
由于列表将永远保持不变,因此任何时候都只有 7 个元素。我想要它的任何元素的索引来更新一些 DOM 元素。
// Gives me any of list element which is random elm of the list `mapping`.
var captured_list_elm = process_mapping_list();
var status = mapping.indexOf(captured_list_elm);// getting always -1
在这里,我的状态始终为 -1
。
- 可能是什么原因?
- 为什么indexOf无法计算其索引?
- 如何找到它,仅通过循环列表获取索引?
创建了 jsFiddle
注意 - 实际上它应该是一个 json,但我们团队中的某个人将其编写为列表列表。我现在无法更新它,因为代码正在生产中。
最佳答案
Array.indexOf()
使用严格相等 (===
) 来查找元素。 mapping
的元素是数组,两个恰好具有相同元素的不同数组不是 ===
。我怀疑 process_mapping_list() 返回的数组看起来类似于 mapping
的元素之一,但不是元素本身(就像您的 fiddle 确实如此)。
您可能需要编写自己的使用自定义相等性测试的查找函数。对于这样的测试,请查看 this thread 。根据您的目标环境,您也许可以使用 findIndex()
而不是 indexOf()
。该函数允许您提供自己的测试函数。
关于javascript - 列表列表的 Array.indexOf 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520401/