Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript拼接问题_Javascript - Fatal编程技术网

javascript拼接问题

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

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