2

我有一小段代码试图从数组中拼接一个项目。在下面的代码中,它应该删除具有“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.
4

2 回答 2

2

你在拼接错误的东西;这应该工作:

  if(autoCompleteArray[i][1] == val) {
    autoCompleteArray.splice(i,1);
  }

的第一个参数.splice()是索引,而不是该索引处的值。

请注意,当您在 index 处拼接时i,对于该迭代,您不应增加i

var i = 0;
while (i < autoCompleteArray.length) {
  if(autoCompleteArray[i][1] == val) {
    autoCompleteArray.splice(i, 1);
    continue;
  }
  ++i;
}

当然,如果只能有一场比赛,这很好,在这种情况下,您也可以break;跳出循环。

于 2013-03-12T04:00:49.880 回答
1

正如@Jack 提到的,您需要将索引(而不是值)传递给拼接。我会将您的循环重写为:

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"]
];

希望有帮助。

于 2013-03-12T04:06:24.340 回答