2016-04-10 4 views
-1

Я пытаюсь разобраться в каждой строке, содержащей «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: это не сработает.

+0

выглядит как фильтр + карта. Почему вы хотите изменить исходный массив? – elclanrs

+0

Я пробовал свой код, и он работал так, как вы сказали .. в конце у меня есть два массива, один из которых содержит только те вещи, которые не начинаются с '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

Вероятно, это тоже нормально.

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"] 
Смежные вопросы