0
点赞
收藏
分享

微信扫一扫

JavaScript 数组扁平化(实现)

科牛 2022-03-14 阅读 76

文章目录

1. 递归和concat实现

// 准备数据,下面的实现方式都是使用这条数据
let arr = [1, [2, [3, [4, [5, [6, [7, [8, [9]]]]]]]]]
function flat(arr) {
  let result = []
  for (let i = 0; i < arr.length; i++) {
    result = result.concat(Array.isArray(arr[i]) ? flat(arr[i]) : arr[i])
  }
  return result
}
console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

2. reduce和concat实现

function flat(arr) {
  return arr.reduce(function (prev, next) {
    return prev.concat(Array.isArray(next) ? flat(next) : next)
  }, [])
}
console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

3. some和concat和扩展运算符实现

function flat(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}
console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

4. split和toString实现

// 这种方式会把数组中的每一项都变成字符串,如果原数组中有字符串,并且字符中包含逗号会出问题
function flat(arr) {
  return arr.toString().split(",")
}
console.log(flat(arr)); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']

5. flat实现

function flat(arr) {
  return arr.flat(Infinity)
}
console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

6. 正则和JSON实现

// 这种方法字符串中如果有[]也会有问题
function flat(arr) {
  let str = JSON.stringify(arr);
  str = str.replace(/(\[|\])/g, '');
  str = '[' + str + ']';
  return JSON.parse(str);
}
console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

7. 只使用递归实现

let result = []
function flat(arr) {
  for (let i = 0; i < arr.length; i++) {
    Array.isArray(arr[i]) ? flat(arr[i]) : result.push(arr[i])
  }
}
flat(arr)
console.log(result); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
举报

相关推荐

0 条评论