【发布时间】:2012-12-22 18:24:02
【问题描述】:
即使元素出现在 myarray 中,我也会从 myarray.indexOf(element) 得到 -1。
这里有一些代码sn-ps:
function createChangeRecord( old_array, new_array ) {
var nds = new_array.slice(0,new_array.length);
var el, idx;
if (...) {
...
} else if ( old_array.length==new_array.length ) {
for ( var i=0; i<old_array.length; i++ ) {
el = old_array[i];
idx = nds.indexOf(el);
if ( idx!=(-1) ) {
...
} else {
var a = "el: " + el + "; nds: " + nds + "; nds.indexOf(el): " + nds.indexOf(el);
alert( a );
...
}
}
...
}
...
}
警报显示 nds 确实包含 el,但警报仅应在 idx==-1 时触发,仅当 nds 不包含 el 时才应为真。
我知道我没有提供足够的信息来确定我的案例中的具体问题,但也许有人可以告诉我一些可能导致这种行为的一般原因?
对类似问题的回答建议使用 jQuery inArray() 而不是 indexOf,但我想知道为什么 indexOf 不起作用。其他人建议 indexOf 用于字符串,而不是数组,但我可以找到的在线文档不是这样。
【问题讨论】:
-
。其他人建议 indexOf 用于字符串,而不是数组,但从我可以找到的在线文档中看并非如此。
indexOf并非所有浏览器都支持数组。 See the MDN Docs. -
即使元素出现在 myarray 中,我也会从 myarray.indexOf(element) 得到 -1。 什么是
element?一个字符串?一个 DOM 节点?一个数字? -
顺便说一句,您可以不带参数调用
Array.slice()来复制整个数组,而不是传递0和length。 -
旧数组的来源是什么?我遇到了这个问题并使用 Ajeet Shah 的回答解决了它。在我的问题中,要搜索的数组是从 JSON 文件中提取的。这些值是带引号的数字,并且在使用 console.log 进行调试时始终显示为数字。
-
@Ajeet,我相信我发布这个问题后的第一批回复并没有解决它。特别是您的回复似乎没有回答为什么 IndexOf 不起作用的问题。可能是后来的回复确实解决了我的问题,但老实说,它已经很长时间了,以至于我不确定并且此时无法访问代码。我对不接受任何回复感到难过,但我无法验证正确性。
标签: javascript arrays indexof