Javascript函数没有正确展平数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript函数没有正确展平数组相关的知识,希望对你有一定的参考价值。
我把一个应该压平嵌套数组的javascript函数放在一起。但是,此方法始终只返回原始数组。例如,使用以下数组运行此函数[1, 2, 3, [4, 5, [6], [ ] ] ]
将返回该数组。我知道有一些方法可以通过reduce来实现这一点,但是有什么逻辑上的原因阻止了这种方法的运行? .map
应该允许我操作一个返回值并通过递归调用在新数组中返回它。
function mapper(array) {
return array.map((item) => {
return (Array.isArray(item)) ? mapper(item) : item
}
)}
答案
什么逻辑原因阻止这种方法工作?
var m = [1, 2, 3, [4, 5, [6], []]];
function mapper(array) {
return array.map((item) => {
// for 1,2,3 it will return item
// when it sees an array it will again call mapper & map
// function will return a new array from it, so map on
// [4, 5, [6], []] will return a new array but will not take out
// individual element and will put it in previous array
return (Array.isArray(item)) ? mapper(item) : item
}
)}
mapper(m)
map函数不会改变原始数组,但会返回一个新数组。
另一答案
您正在将数组映射到自身。基本上因为map将返回一个与输入具有完全相同元素数的数组。你不能指望它返回更多,所以你不能用它来扁平化阵列。
应该使用减少代替:
function flatten(obj) {
if (Array.isArray(obj)) {
return obj.reduce((a, b) => a.concat(flatten(b)), []);
} else {
return [obj];
}
}
以上是关于Javascript函数没有正确展平数组的主要内容,如果未能解决你的问题,请参考以下文章