2016-04-10 5 views
-1

"INIT:"を含むすべての文字列を並べ替えて別の配列に入れようとしています。それはINIT:を見つけた場合、それはINIT:せずに文字列にnoInitを設定します特定の要素をある配列から別の配列に移動するにはどうすればよいですか?

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); 
    } 
} 

は、ここに私のコードです。その後、配列をcmdList配列に追加し、もう一方の配列からコードを削除します。これは動作しますが、一度しか動作しません。次のすべての文字に対して、INIT:文字列は機能しません。

+0

フィルタ+マップのように見えます。なぜ元の配列を突然変異させたいのですか? – elclanrs

+0

私はあなたのコードを試してみましたが、あなたが言ったように働いていました。私は2つの配列を持っています.1つは 'INIT:'で始まらないものと 'INIT:'で始まったもの'INIT:'がなければ。あなたが求めていることを誤解しているかもしれません。 – FredMaggiowski

答えて

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

することはおそらく、これもOKです。

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:/,"") + '"}')); 
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"] 
関連する問題