我有一小段代码,我正在尝试从数组中拼接一个项目。在下面的代码中,它应该删除具有“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");
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.
答案 0 :(得分:2)
你拼错了东西;这应该有效:
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;
}
如果当然只有一个匹配,这很好,在这种情况下你也可以break;
离开循环。
答案 1 :(得分:1)
正如@Jack所提到的,你需要将索引(不是值)传递给splice。我会把你的循环重写为:
for (var i = 0; i < autoCompleteArray.length; i++) {
if (autoCompleteArray[i][1] === val) {
autoCompleteArray.splice(i--, 1);
}
}
那应该可以解决你的问题。请参阅此处的演示:http://jsfiddle.net/7PM94/
另请注意,您可以使用文字语法而不是推送元素来创建数组。您可以按如下方式定义autoCompleteArray
:
var autoCompleteArray = [
["1", "Java"],
["2", "JavaScript"]
];
希望有所帮助。