2017-10-12 76 views
0

我需要在每個第n個成員之後向JavaScript數組中插入一個新成員。Javascript:在每個第n個成員之後插入數組的新成員

如果我嘗試迭代數組並插入新成員array.splice(),它不起作用,因爲任何類型的迭代循環都依賴於數組長度,數組長度在每次迭代時都會發生變化。例如,我有數組,如:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

,並希望把它想:

[1, 2, 'insert this', 3, 4, 'insert this', 5, 6, 'insert this', 7, 8, 'insert this', 9, 10, 'insert this'] 

如果我嘗試下面的代碼,我結束了空數組:

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
for (var itemIndex = 2; itemIndex < dataRow.length; itemIndex += 2) { 
    dataRow.splice(itemIndex, 0, 'insert this'); 
} 

這問題不是人們只想獲得數組成員或將其插入到某個特定位置的問題的重複。問題是,如何在每個第n個位置上做到這一點。

+1

而不是改變實際的數組,你可以從它生成一個新的 – Faly

回答

1

只需將您的代碼更改爲此即可。將3添加到itemIndex以解釋1插入。

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 
for (var itemIndex = 2; itemIndex < dataRow.length; itemIndex += 3) { 
 
    
 
    dataRow.splice(itemIndex, 0, 'insert this'); 
 
} 
 

 
console.log(dataRow);

+0

就是這樣,謝謝 – cincplug

1

你可以從最終迭代和拼接額外的項目。

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 
for (var itemIndex = Math.floor(dataRow.length/2) * 2; itemIndex > 0; itemIndex -= 2) { 
 
    dataRow.splice(itemIndex, 0, 'insert this'); 
 
} 
 

 
console.log(dataRow);

1

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 
var length = dataRow.length; 
 
for (var i = 1; i <= length/2; i++) { 
 
    dataRow.splice(i * 3 - 1, 0, 'insert this'); 
 
} 
 
console.log(dataRow);

希望這個作品!

相關問題