I am trying to understand how to take an array like [1,2,3,4,5]
and then between each index, add a ,
so the array becomes [1, ', ', 2, ', ', 3, ', ', 4, ', ', 5]
I know it sounds stupid but I'm having some issues with it.
Basically, I want to use something like splice()
method, so that I can iterate over the array and each odd index, I can do splice(index, 0, ', ')
.
I am trying to understand how to take an array like [1,2,3,4,5]
and then between each index, add a ,
so the array becomes [1, ', ', 2, ', ', 3, ', ', 4, ', ', 5]
I know it sounds stupid but I'm having some issues with it.
Basically, I want to use something like splice()
method, so that I can iterate over the array and each odd index, I can do splice(index, 0, ', ')
.
7 Answers
Reset to default 5You can use .reduce
method which accepts as parameter a callback
function.
The reduce() method applies a function against an accumulator and each value of the array (from left-to-right) to reduce it to a single value.
var array=[1,2,3,4,5];
console.log(array.reduce(function(a,b){
return a.concat(b).concat(",");
},[]).slice(0,-1));
Use .reduce()
- Start with empty array
- Push an element of
array
then push', '
- At last remove last
', '
using.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);
You can use reduce
to create a new array with the inserted values:
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], ",")
);
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;
}, []));
With just two methods:
Edit
If you want to save your commas use some regexp instead:
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);
Short solution using Array.prototype.join()
, Array.prototype.map()
and String.prototype.match()
functions:
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);
You wanted splice
approach? Here it is:
var arr = [1,2,3,4,5];
for (var i = 1; i < arr.length; i+=2) {
arr.splice(i, 0, ',');
}
console.log(arr);
You can use a variable at .splice()
to increment index by 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);
arr.join(',').split('');
- the JS engine will prefer them all being the same type (you'll have an array of strings) but it depends if you actually need mixed strings with number types or not. – Luke Briggs Commented Feb 20, 2017 at 18:441
, increment index passed to.splice()
by2
. – guest271314 Commented Feb 20, 2017 at 19:11