函数用于将多维数组展开

11 浏览
0 Comments

函数用于将多维数组展开

这个问题已经有了答案:

合并/展平一个数组的数组

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

这是期望的结果:

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

  1. 我在《Web开发专业JavaScript》中查找了一些帮助函数,但找不到用于查找数组维数的函数。
admin 更改状态以发布 2023年5月24日
0
0 Comments

用递归的一种可能解决方法如下:

function flatten(array, result) {
    result === undefined && (result = []);
    for (var i = 0, len = array.length; i < len; i++) {
        if (Object.prototype.toString.call(array[i]) === '[object Array]') {
            flatten(array[i], result);
        } else {
            result.push(array[i]);
        }
    }
    return result;
}
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]

DEMO: http://jsfiddle.net/6ZhJ6/

0
0 Comments

技巧在于,如果输入数组的一个元素本身是一个数组,则应该将元素的扁平化项“concat”到输入数组中,而不是推入整个数组。

这里是一种使用“reduce”和“Array.isArray(...)”解决方案,它们仅在支持ECMAScript 5.1th Edition后规范的新浏览器中可用:

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]

0