用于展平多维数组的功能

Bac*_*hus 2 javascript jagged-arrays

var flatten = function (array){
  // TODO: Program me
  var newArray = [];
  for(var i = 0; i<array.length; i++) {
    newArray.push(array[i]);
  }
  return newArray;
}
Run Code Online (Sandbox Code Playgroud)

这是结果除外:

flatten([1,2,3]) // => [1,2,3]
flatten([[1,2,3],["a","b","c"],[1,2,3]])  // => [1,2,3,"a","b","c",1,2,3]
flatten([[[1,2,3]]]) // => [[1,2,3]]

Test result:

Test Passed

Test Passed

Test Failed: Value is not what was expected
Run Code Online (Sandbox Code Playgroud)
  1. 我在"专业JS for Web Developers"中搜索了一些heliping函数,但我找不到一个用于查找数组维数的函数.

mae*_*ics 8

诀窍在于,如果输入数组的一个元素本身就是一个数组,那么你应该将元素的扁平项"连接"到输入数组中,而不是推送整个数组.

这是一个使用"reduce"和"Array.isArray(...)"的解决方案,这些解决方案仅适用于支持ECMAScript第5.1版后期规范的较新浏览器:

function flatten(array) {
  return array.reduce(function(memo, el) {
    var items = Array.isArray(el) ? flatten(el) : [el];
    return memo.concat(items);
  }, []);
}

flatten([1,2,3])                          // => [1,2,3]
flatten([[1,2,3],["a","b","c"],[1,2,3]])  // => [1,2,3,"a","b","c",1,2,3]
flatten([[[1,2,3]]])                      // => [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)