函数用于将多维数组展开
函数用于将多维数组展开
这个问题已经有了答案:
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
- 我在《Web开发专业JavaScript》中查找了一些帮助函数,但找不到用于查找数组维数的函数。
admin 更改状态以发布 2023年5月24日
用递归的一种可能解决方法如下:
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]
技巧在于,如果输入数组的一个元素本身是一个数组,则应该将元素的扁平化项“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]