Javascript函数不能正确展平数组

我把一个JavaScript函数放在一起,这个函数应该是拼合一个嵌套数组。但是,这种方法总是只返回原始数组。例如,使用以下数组[1, 2, 3, [4, 5, [6], [ ] ] ]运行此函数将只返回该数组。我知道有些方法可以使用reduce来做到这一点,但是阻止这种方法工作的逻辑原因是什么? .map应该允许我操作一个返回值并通过递归调用返回新数组中的数据。Javascript函数不能正确展平数组

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将返回一个数组,其元素数量与输入相同。你不能期望它返回更多,所以你不能用它来展平数组。

应该使用减少而不是:

function flatten(obj) { 

if (Array.isArray(obj)) {

return obj.reduce((a, b) => a.concat(flatten(b)), []);

} else {

return [obj];

}

}

以上是 Javascript函数不能正确展平数组 的全部内容, 来源链接: utcz.com/qa/260974.html

回到顶部