2015-12-10 6 views
-2

У меня есть массив:Как вставить элемент между каждым элементом массива?

[1, 2, 3, 4, 5] 

, и я хочу, чтобы привнести что-то (скажем 0) между каждым элементом массива, например:

[1, 0, 2, 0, 3, 0, 4, 0, 5] 

Вводимый элемент может быть что угодно: число, а строка, элемент JSX и т. д.

Есть ли элегантный способ сделать это?

+0

Вы можете перебирать массив и нажмите одновременно. – Dane

ответ

2

Это смехотворный способ сделать это. Я хотел reduce:

var arr = [1, 2, 3, 4, 5].reduce(function (p, c, i, a) { 
    return i < a.length - 1 ? p.concat(c, 0) : p.concat(c); 
}, []); 

Если введен элемент изменяется, просто обернуть код в функции.

function stuffer(arr, el) { 
    return arr.reduce(function (p, c, i, a) { 
    return i < a.length - 1 ? p.concat(c, el) : p.concat(c); 
    }, []); 
} 

stuffer(arr, '<p>Hi</p>'); 
+1

Я копаю это решение. – silvenon

2

самый здравомыслящий способ просто создать новый массив:

var arr = [1, 2, 3, 4, 5], 
    newArr = []; 
for (var i = 0; i < arr.length; i++) { 
    newArr.push(arr[i], 0); 
} 

Менее разумный способ будет включать использование Array.splice много.

+0

Minor nitpick - это добавляет '0' в конце' newArr' тоже –

+1

Meh, да, я оставлю это как упражнение для читателя ...;) – deceze

0

просто присоединиться и разделить назад

var arr = [1, 2, 3, 4, 5]; 
alert(arr.join(',0,').split(',')); 

может быть переработан в метод

function insertBetweenAllElements(arr, newElement) 
{ 
    return arr.join(',' + newElement + ',').split(',') 
} 
var updatedArr = insertBetweenAllElements(arr, '0') 
alert(updatedArr); 

Добавление поддержки для всех видов данных (междунар, ул и т.д.)

function insertBetweenAllElements(arr, newElement) 
{ 
    arr.forEach(function(value, index, arr){ arr.splice(index+index, 0, newElement); }) 
    return arr.slice(1,arr.length); 
} 
var updatedArr = insertBetweenAllElements(arr, '0') 
alert(updatedArr); 
+1

Это хорошо для данного примера, но у вас есть чтобы начать беспокоиться о том, каковы фактические элементы массива, если вы имеете дело со строками, которые могут содержать запятые и т. д. –

+0

Это мое плохое, я отредактировал свой ответ, чтобы дополнительно определить введенный элемент. Спасибо за добавление решения для других типов данных. – silvenon

+0

@silvenon, если вы считаете это полезным, не забудьте подтвердить или принять ответ. – gurvinder372

0

Не уверен, что я бы класс это как элегантное - но это работает (и это никогда на месте, никаких временных массивов вредили или использовать в этом коде)

var array = [1,2,3,4,5]; 
function insertBetween(arr, val) { 
    arr.map(function(e, i) { if (i) arr.splice(i * 2 - 1, 0, val) }); 
} 
insertBetween(array, 0); 
Смежные вопросы