关于javascript:如何在JS数组的所有元素之间插入新元素

353 阅读2分钟

关于javascript:如何在JS数组的所有元素之间插入新元素?

我有一个数组[a, b, c]。 我希望能够在该数组的每个元素之间插入一个值,例如:[0, a, 0, b, 0, c, 0]。

我想可能是这样,但我无法使其正常工作。

1 2 3 4 5 6 7for (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 4var 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 9var 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 8var array = ['a', 'b', 'c'],     i = array.length; do {     array.splice(i, 0, 0); } while (i--) console.log(array);

如果要排除数组的开始和结束,另一种方法是:

1 2 3 4var 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 4var arr = ['a', 'b', 'c'] var newArr = [0].concat(...arr.map(e => [e, 0])) console.log(newArr)

其他方式:

1 2 3 4 5 6var 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 9function 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 9function 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 8var 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 10var 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 3var arr = ['a', 'b', 'c']; var newArray = ("0," + arr.toString().split(",").join(",0,")).split(","); console.log(newArray);

您可以尝试以下代码。它将在数组的每个两个元素的中间加0

1console.log(['a', 'b', 'c'].reduce((r, a) => r.concat(a,0), [0]).slice(1, -1))

你可以做

1 2 3 4 5 6 7 8 9let 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 9let 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 11function 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 9let 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 4const 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

如果要仅在现有元素之后插入元素:

1console.log(["a","b","c"].map(i => [i, 0]).flat())

这看起来像散布算法,但对头部和尾部也做一些补充。所以我称之为extrasperse。

1 2 3 4var 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)));