如何将特定元素从一个数组移动到另一个数组?

时间:2016-04-10 17:40:04

标签: javascript arrays replace

我正在尝试整理每个字符串,其中包含“INIT:”并将其放入另一个数组中。

这是我的代码:

for (j = 0; j < splitCode.length; j++) {
    if (splitCode[j].indexOf('INIT:') > -1) {
        noInit = splitCode[j].replace('INIT:', '');
        cmdList.push('{id:MinecartCommandBlock,Command:"'+noInit+'"}');
        splitCode.splice(j, 1);
    }
}

如果找到INIT:,则会将noInit设置为不包含INIT:的字符串。然后,它将它添加到cmdList数组并从其他数组中删除代码。这有效,但它只能工作一次。对于每个后续INIT:字符串,它都不起作用。

3 个答案:

答案 0 :(得分:0)

splice重新索引数组,因此删除项目会使您跳过下一个项目。要避免这种情况,请向后迭代,或使用--j

var splitCode = ['INIT:1', 'INIT:2'],
    cmdList = [];
for (j = 0; j < splitCode.length; ++j) {
  if (splitCode[j].indexOf('INIT:') > -1) {
    cmdList.push('Cmd:' + splitCode[j].replace('INIT:', ''));
    splitCode.splice(j, 1); // This reindexes the array
    --j; // Update the iterator index to reflect changes
  }
}
cmdList; // ["Cmd:1", "Cmd:2"]

答案 1 :(得分:0)

可能这也没关系。

var splitCode = ['INIT:1','INIT:2', 'Boru:5', 'INIT:3','INIT:4'],
      cmdList = [];
splitCode.forEach( e => !!/INIT:/.test(e) && 
cmdList.push('{id:MinecartCommandBlock,Command:"' + e.replace(/INIT:/,"") + '"}'));

答案 2 :(得分:0)

var array1 = ["INIT: one", "two", "three", "INIT: four"];
var array2 = [];

array1.forEach(function(e) {
  if (e.indexOf("INIT:") == 0) array2.push(e);
})

array2 // <-- ["INIT: one","INIT: four"]