关于javascript:如何在JS数组的所有元素之间插入新元素?
我有一个数组[a, b, c]。 我希望能够在该数组的每个元素之间插入一个值,例如:[0, a, 0, b, 0, c, 0]。
我想可能是这样,但我无法使其正常工作。
1 2 3 4 5 6 7 | for (let i = 0; i < array.length; i++) { newArray = [ ...array.splice(0, i), 0, ...array.splice(i, array.length), ]; } |
---|
感谢你们对我的帮助!
** 相关讨论
- 您想获取一个新数组或在给定数组中插入?
- @NinaScholz如果可以将其插入当前数组中会更好
- 我认为您将slice与splice混淆了。 我的答案显示了如何通过插入原始数组来使用splice完成此操作。
为了获得一个新的数组,您可以连接零件并为每个元素添加一个零元素。
1 2 3 4 | var array = ['a', 'b', 'c'], result = array.reduce((r, a) => r.concat(a, 0), [0]); console.log(result); |
---|
使用相同的数组
1 2 3 4 5 6 7 8 9 | var array = ['a', 'b', 'c'], i = 0; while (i <= array.length) { array.splice(i, 0, 0); i += 2; } console.log(array); |
---|
从末尾开始迭代会短一些。
1 2 3 4 5 6 7 8 | var array = ['a', 'b', 'c'], i = array.length; do { array.splice(i, 0, 0); } while (i--) console.log(array); |
---|
如果要排除数组的开始和结束,另一种方法是:
1 2 3 4 | var arr = ['a', 'b', 'c'] var newArr = [...arr].map((e, i) => i < arr.length - 1 ? [e, 0] : [e]).reduce((a, b) => a.concat(b)) console.log(newArr) |
---|
您可以将map()与ES6扩展语法和concat()一起使用
1 2 3 4 | var arr = ['a', 'b', 'c'] var newArr = [0].concat(...arr.map(e => [e, 0])) console.log(newArr) |
---|
其他方式:
1 2 3 4 5 6 | var a = ['a', 'b', 'c'], b; b = a.reduce((arr, b) => [...arr, b, 0], []); console.log(b); |
---|
使用平面图的另一个ES6 +版本(如果可以创建一个新数组,则可以):
1 2 | ['a', 'b', 'c', 'd'] .flatMap((e, index) => index ? [e, 0] : [0, e, 0]) |
---|
您可以使用.reduce():
1 2 3 4 5 6 7 8 9 | function intersperse(arr, val) { return arr.reduce((acc, next) => { acc.push(next); acc.push(val); return acc; }, [val]); } console.log(intersperse(['a', 'b', 'c'], 0)); |
---|
或通过修改原始数组来实现此目的:
1 2 3 4 5 6 7 8 9 | function intersperse(arr, val) { for (let i = 0; i <= arr.length; i += 2) { arr.splice(i, 0, val); } return arr; } console.log(intersperse(['a', 'b', 'c'], 0)); |
---|
您只需要遍历数组元素并在每次迭代中添加新元素,如果到达最后一次迭代,则在最后一项之后添加新元素。
这应该是您的代码:
1 2 3 4 5 6 7 8 | var arr = ['a', 'b', 'c']; var results = []; arr.forEach(function(el, index) { results.push(addition); results.push(el); if (index === arr.length - 1) results.push(addition); }); |
---|
演示:
这是一个演示代码段:
1 2 3 4 5 6 7 8 9 10 | var arr = ['a', 'b', 'c']; var results = []; var addition = 0; arr.forEach(function(el, index) { results.push(addition); results.push(el); if(index === arr.length -1) results.push(addition); }); console.log(results); |
---|
可以通过拆分和连接使用字符串来完成。
1 2 3 | var arr = ['a', 'b', 'c']; var newArray = ("0," + arr.toString().split(",").join(",0,")).split(","); console.log(newArray); |
---|
您可以尝试以下代码。它将在数组的每个两个元素的中间加0
1 | console.log(['a', 'b', 'c'].reduce((r, a) => r.concat(a,0), [0]).slice(1, -1)) |
---|
你可以做
1 2 3 4 5 6 7 8 9 | let arr = ['a', 'b', 'c']; arr = arr.reduce((a, b) => { a.push(0); a.push(b); return a; }, []); arr.push(0); console.log(arr); |
---|
1 2 3 4 5 6 7 8 9 | let arr = ['a', 'b', 'c']; function insert(items, separator) { const result = items.reduce( (res, el) => [...res, el, separator], [separator]); return result; } console.log(insert(arr, '0')); |
---|
1 2 3 4 5 6 7 8 9 10 11 | function insert(arr, elm) { var newArr = []; for(var i = 0; i < arr.length; i++) { // for each element in the array arr newArr.push(elm); // add the new element to newArr newArr.push(arr[i]); // add the current element from arr } newArr.push(elm); // finally add the new element to the end of newArr return newArr; } console.log(insert(["a","b","c"], 0)); |
---|
以上所有方法都使用了很长的字符串,这使我的android计算机无法在React Native上运行。
我有这个工作
1 2 3 4 5 6 7 8 9 | let arr = ['a', 'b', 'c']; let tmpArr = []; for (const item in arr) { tmpArr.push(item); tmpArr.push(0); } console.log(tmpArr); |
---|
另一种方法是使用一些功能方法,例如zip和flat。查看lodash。
1 2 3 4 | const array = ['a', 'b', 'c'] const zeros = Array(array.length + 1).fill(0) const result = _.zip(zeros, array).flat().filter(x => x !== undefined) console.log(result) |
---|
1 |
---|
如果要仅在现有元素之后插入元素:
1 | console.log(["a","b","c"].map(i => [i, 0]).flat()) |
---|
这看起来像散布算法,但对头部和尾部也做一些补充。所以我称之为extrasperse。
1 2 3 4 | var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], extrasperse = (x,a) => a.reduce((p,c,i) => (p[2i+1] = c, p), Array(2a.length+1).fill(x)); console.log(JSON.stringify(extrasperse("X",arr))); |
---|