Skip to content

[js] 第119天 写一个方法把多维数组降维 #1059

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第119天 写一个方法把多维数组降维

Activity

fengyun2

fengyun2 commented on Aug 13, 2019

@fengyun2
const arr = [1, 2, [3, 4, [5, 6]]]
arr.flat(Infinity)
// [1, 2, 3, 4, 5, 6]
NicholasBaiYa

NicholasBaiYa commented on Aug 13, 2019

@NicholasBaiYa
function flattenDeep(arr) {
   return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
}

抄MDN上的,会把空项过滤。

nowherebutup

nowherebutup commented on Aug 13, 2019

@nowherebutup
  function handlerArr(arr, _rst) {
    const rst = _rst || [];
    arr.forEach(ele => {
      typeof ele === 'object' ? handlerArr(ele, rst) : rst.push(ele);
    });
    return rst;
  }
LinStan

LinStan commented on Aug 13, 2019

@LinStan
let arr = [1, 2, {}, 3, [4, {}, 5], [6, 7, [8, null, 9]]];
//递归
function flat (arr) {
  let ret = []
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] instanceof (Array)) {
      ret = ret.concat(flat(arr[i]))
    }
    else {
      ret.push(arr[i])
    }
  }
  return ret
}
console.log(flat(arr))
//ES10新增的内置方法
arr.flat(Infinity)
HuoXiaoYe

HuoXiaoYe commented on Aug 13, 2019

@HuoXiaoYe
		function flatArr(arr){
			var result = [];
			arr.forEach((item)=>{
				if(Array.isArray(item)){
					let subResult = flatArr(item);
					result = result.concat(subResult);
				}else{
					result[result.length] = item;
				}
			})
			return result;
		}
		console.log(flatArr([1, 2, [3, 4, [5, 6]]])) // [1, 2, 3, 4, 5, 6]
ghost

ghost commented on Aug 13, 2019

@ghost
function flatten(arr, depth = 1) {
    if (!depth || !Array.isArray(arr)) return arr
    return arr.reduce((prev, mem) => 
        prev.concat(flatten(mem, depth - 1)), [])
}

怎么感觉和搬mdn的那位这么像...但是这个支持指定深度。

Konata9

Konata9 commented on Aug 13, 2019

@Konata9
const flatArr = (arr, deep = false) =>
  arr.reduce((prev, cur) => {
    if (deep && Array.isArray(cur)) {
      return prev.concat(flatArr(cur, deep));
    } else {
      return prev.concat(cur);
    }
  }, []);

const arr = [1, [2, [3, [4, [5], 6], 7], 8], 9];
const arr2 = [{}, [{}, {}, {}, [2, 3, 4, [5, 6, 7, [{}, {}]]]]];
console.log(flatArr(arr, true));
Jingce-lu

Jingce-lu commented on Nov 7, 2019

@Jingce-lu
const flatArr = (arr) => Array.isArray(arr)
  ? arr.reduce( (a, b) => [...a, ...flatArr(b)] , [])
  : [arr]

flatArr([1, [[2], [3, [4]], 5]])
zhaofeipeter

zhaofeipeter commented on Jul 30, 2020

@zhaofeipeter

const flatArray = arr => arr.flat(Infinity);

xiaoqiangz

xiaoqiangz commented on Jul 7, 2022

@xiaoqiangz

const arr = [2,3,[4,5,6],[7,9,0],10,[344,666,[888,999]]]
function flat(data) {
return data.reduce((prev,cur) => {
if (Array.isArray(cur)) {
return prev.concat(flat(cur))
} else {
return prev.concat(cur)
}
},[])
}
let arr1 = flat(arr)
console.log(arr1)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@Konata9@fengyun2@xiaoqiangz@Jingce-lu

        Issue actions

          [js] 第119天 写一个方法把多维数组降维 · Issue #1059 · haizlin/fe-interview