2017-02-20 5 views
4

Я пытаюсь понять, как принять массив как [1,2,3,4,5], а затем между каждым индексом, добавьте , поэтому массив становится [1, ', ', 2, ', ', 3, ', ', 4, ', ', 5]Как взять массив и вставить запятые между каждым элементом?

Я знаю, что это звучит глупо, но у меня возникают некоторые проблемы с ним.

В принципе, я хочу использовать что-то вроде метода splice(), чтобы я мог перебирать массив и каждый нечетный индекс, я могу сделать splice(index, 0, ', ').

+1

Вместо того, чтобы пытаться изменить свой A rray, верните новый - этого будет легче достичь. – georg

+0

Быстрый хак: 'arr.join (','). Split ('');' - движок JS предпочтет, чтобы все они были одного типа (у вас будет массив строк), но это зависит от того, действительно ли вы на самом деле нужны смешанные строки с номерами или нет. –

+0

Для ES6 дубликат http://stackoverflow.com/questions/37128624/terse-way-to-intersperse-element-between-all-elements-in-javascript-array. – kennytm

ответ

1

Метод .reduce который принимает как параметр a callback функция.

Уменьш() метод применяет функцию от аккумулятора и каждый значение массива (слева направо), чтобы свести его к одному значению.

var array=[1,2,3,4,5]; 
 
console.log(array.reduce(function(a,b){ 
 
    return a.concat(b).concat(","); 
 
},[]).slice(0,-1));

+0

Ваше решение не должно добавлять запятую в конце результата – SimpleJ

+1

@SimpleJ, я обновил свой ответ. –

2

Вы можете использовать reduce, чтобы создать новый массив с вставленными значениями:

function weaveArray(array, weaveValue) { 
 
    const {length} = array; 
 
    return array.reduce((result, value, i) => { 
 
    if(i < length - 1) { 
 
     result.push(value, weaveValue); 
 
    } else { 
 
     result.push(value); 
 
    } 
 
    return result; 
 
    }, []); 
 
} 
 

 
console.log(
 
    weaveArray([1,2,3,4,5], ",") 
 
);

1

С помощью всего лишь двух способов:

Редактировать

Если вы хотите сохранить ваши запятые использовать некоторые регулярное выражение вместо:

var c = a.join(', , , ').split(/\s(?=,\s)/);

var a = [1,2,3,4,5]; 
 
var b = a.join(' , ').split(' '); 
 
var c = a.join(', , , ').split(/\s(?=,\s)/); 
 
console.log(b,c);

+0

см. Мой комментарий выше - вы можете упомянуть, что типы не соответствуют этому вопросу. –

+0

ваш комментарий плохой, потому что значения '22',' 33' разделит его на '2',' 2' и т. Д. –

+0

Я рассматривал только отдельные числа в комментарии, но он не меняет информацию о типах (в частности, JS-движки _hate_ массивы смешанного типа - массив всех строк намного лучше). –

1

console.log([1,2,3,4,5].reduce(function(acc, val, idx, list) { 
 
    acc.push(val); 
 
    if (idx < list.length - 1) { 
 
    acc.push(','); 
 

 
    } 
 
    return acc; 
 
}, []));

1

Короткое решение с использованием Array.prototype.join(), Array.prototype.map() и String.prototype.match() функции:

var arr = [1,2,3,4,5], 
 
    newArr = arr.join(',').match(/\w+|\W+/g).map(function(v){ 
 
     return (isNaN(v))? v : +v; // considering numeric values 
 
    }); 
 

 
console.log(newArr);


Вы хотели splice подход? Вот оно:

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

 
console.log(arr);

1

Использование .reduce()

  1. Начать с пустым массивом
  2. Нажимает элемент array затем нажмите ', '
  3. наконец удалить последний ', ' USIN г .pop()

var array1 = [1, 2, 3, 4, 5] 
 

 
var array2 = array1.reduce(function(acc, val) { 
 
    acc.push(val); 
 
    acc.push(', '); 
 
    return acc; 
 
}, []); 
 

 
array2.pop(); 
 

 
console.log(array2);

0

Вы можете использовать переменную в .splice() для увеличения индекса по 2

var arr = [1,2,3,4,5]; 
 
for (let i = 1, len = arr.length * 2; arr.length < len - 1; arr.splice(i, 0, ","), i += 2); 
 
console.log(arr);

Смежные вопросы