数组相关问题

数组扁平化

方法一:递归

function fun(arg) {
    let arr = [];
    arg.forEach((v, i) => {
      if (Array.isArray(v)) {
        arr = arr.concat(fun(v));
      } else {
        arr.push(v);
      }
    })

    return arr;
}

方法二: array.reduce

/**
 * array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
 * total: 初始值/当前计算后的值
 * currentValue 当前值
 * initialValue 初始值
 */
function fun(arg) {
  return arg.reduce((res, item) => {
    return  res.concat(Array.isArray(item) ? fun(item) : item);
  }, []);
}

方法三:Array.toString 将数组转化字符串,再转化为数组

function fun(arg) {
  return arg.toString().split(',').map((v) => {
    return parseInt(v);
  });
}

方法四:Array.join 原理同三

function fun(arg) {
  return arg.join(',').split(',').map((v) => {
    return parseInt(v);
  });;
}

方法五:Array.some 遍历判断符合条件的,直到不是数组为止

// exp : [1, 2, 3, [4,[7], 5], 6]
// 第一次 遍历 arg 结果为 [1, 2, 3, 4, [7], 5, 6]
// 第二次 遍历 arg 结果为 [1, 2, 3, 4, 7, 5, 6]
// concat 连接可以传递多个参数,可以是数组,也可以是具体的值
function fun(arg) {
  while(arg.some(item => Array.isArray(item))) {
    arg = [].concat(...arg);
  }

  return arg;
}

数组去重

方法一:Array.includes/indexOf

function fun(arg) {
  let arr = [];
  arg.forEach((v, i) => {
    if (!arr.includes(v)) {
      arr.push(v);
    }
  })

  return arr;
}

方法二: set

function fun(arg) {
    return [...new Set(arg)];
}
powered by Gitbook该文件修订时间: 2023-08-21 16:28:41

results matching ""

    No results matching ""