js数组里面包含一个数组

数组里面包含一个数组

arr = [1,2,3,4,5,6,7,[8,9,0,10],11,12,13,14]

如何得到

arr = [1,2,3,4,5,6,7,8,9,0,10,11,12,13,14]

或者是

// 原数组
arr = [1,2,3,4,5,6,7,11,12,13,14]
// 新数组
arr1 = [8,9,0,10]
// 把arr1增加到某一个元素后边,比如说增加到7元素后边
// 得到
arr = [1,2,3,4,5,6,7,8,9,0,10,11,12,13,14]

如何实现,脑子突然一下卡住了

阅读 2.6k
4 个回答

如果是已有数组,可使用flat扁平
[1,2,3,4,5,6,7,[8,9,0,10],11,12,13,14].flat()

如果是两个数组插值

var index = arr.indexOf(7)
arr.splice(index + 1, 0, ...arr1)
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
参考阅读

展开数组的问题

需要展开 arr = [1,2,3,4,5,6,7,[8,9,0,10],11,12,13,14]

一种方法是,展开形成一个新的数组,直接使用 flat()

let arr = [1, 2, 3, 4, 5, 6, 7, [8, 9, 0, 10], 11, 12, 13, 14];
arr = arr.flat();

另一种,对于 const arr,又需要直接改变其元素,循环处理

const arr = [1, 2, 3, 4, 5, 6, 7, [8, 9, 0, 10], 11, 12, 13, 14];

for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
        arr.splice(i, 1, ...arr[i]);
    }
}

拼接数组

// 原数组
arr = [1,2,3,4,5,6,7,11,12,13,14]
// 新数组
arr1 = [8,9,0,10]

同样分两种情况,一种是产生新的数组(不影响原数组)

// 原数组
const arr = [1, 2, 3, 4, 5, 6, 7, 11, 12, 13, 14]
// 新数组
const arr1 = [8, 9, 0, 10];

// 方法1
const r1 = arr.concat(arr1);
// 方法2
const r2 = [...arr, ...arr1];

直接在原数组后面追加,使用 push()`

arr.push(...arr1);

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

哈,这种问题吧,有一堆的解决方案。
但是如果是也业务中使用,就别自己写实现了,有很多非常稳定成熟的工具辅助库。
比如 知名的 lodash库,针对你这个,推荐看一下里面的:

_.flatten
_.flattenDeep

想看实现的话,直接翻看 源代码就行,写的很好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题