javascript拼接问题
我有一小段代码,其中我试图从数组中拼接一个项。在下面的代码中,它应该删除包含“Javascript”的项,并且生成的数组应该只包含“Java”。我做错了什么javascript拼接问题,javascript,Javascript,我有一小段代码,其中我试图从数组中拼接一个项。在下面的代码中,它应该删除包含“Javascript”的项,并且生成的数组应该只包含“Java”。我做错了什么 var autoCompleteArray = new Array(); var item = new Array(); item.push("1"); item.push("Java"); autoCompleteArray.push(item); var item2 = new Array(); item2.push("2"); i
var autoCompleteArray = new Array();
var item = new Array();
item.push("1");
item.push("Java");
autoCompleteArray.push(item);
var item2 = new Array();
item2.push("2");
item2.push("Javascript");
autoCompleteArray.push(item2);
var val = "Javascript";
for(var i=0;i<autoCompleteArray.length;i++){
if(autoCompleteArray[i][1] == val) {
autoCompleteArray.splice(autoCompleteArray[i],1);
}
}
console.log(autoCompleteArray); //Should show Java in the array since Javascript item has been removed.
var autoCompleteArray=new Array();
var item=新数组();
项目.推送(“1”);
推送(“Java”);
自动完成排列。推送(项目);
var item2=新数组();
项目2.推送(“2”);
项目2.推送(“Javascript”);
自动完成阵列推送(第2项);
var val=“Javascript”;
对于(var i=0;i您拼接了错误的东西;这应该可以:
if(autoCompleteArray[i][1] == val) {
autoCompleteArray.splice(i,1);
}
.splice()
的第一个参数是索引,而不是该索引处的值
请注意,当您在索引i
处拼接时,对于该迭代,您不应增加i
:
var i = 0;
while (i < autoCompleteArray.length) {
if(autoCompleteArray[i][1] == val) {
autoCompleteArray.splice(i, 1);
continue;
}
++i;
}
var i=0;
while(i
当然,如果只能有一个匹配项,这是可以的,在这种情况下,您也可以中断;
退出循环。正如@Jack提到的,您需要将索引(而不是值)传递给拼接。我会将您的循环重写为:
for (var i = 0; i < autoCompleteArray.length; i++) {
if (autoCompleteArray[i][1] === val) {
autoCompleteArray.splice(i--, 1);
}
}
希望对您有所帮助。您正在更改正在迭代的数组..,您正在寻找麻烦。为什么不使用filter
?(必要时使用Shiv。)autoCompleteArray=autoCompleteArray.filter(函数(项){return item[i]!=val;})
而不是使用while循环和continue
为什么不直接减量i
?请看我的答案。@AaditMShah虽然这样做有效并节省了几行,但我不建议以这种方式干预循环不变量。@AaditMShah首先让我们明确一点,不建议在同一数组上进行迭代和拼接,因此优化它将隐藏这一事实。其次,循环不变量从执行减量的那一刻起一直被破坏,直到它增加为止;在这一点之外,循环不变量之间没有代码的事实。@Jack-你的逻辑让我惊讶。=)@AaditMShah经验告诉你显式>隐式:)
var autoCompleteArray = [
["1", "Java"],
["2", "JavaScript"]
];