gpt4 book ai didi

javascript - javascript中使用reduce和each压平函数

转载 作者:行者123 更新时间:2023-12-02 15:17:03 25 4
gpt4 key购买 nike

展平函数是使用each和reduce函数创建的:

function each(collection, iterator) {
if (Array.isArray(collection)){
for (var i=0;i<collection.length;i++){
iterator(collection[i],i,collection)
}
}else {
for (var key in collection){
iterator(collection[key],key,collection)
}
}
};



function reduce(collection, iterator, accumulator) {
var initalizing = arguments.length === 2;
each(collection,function(value){
accumulator = iterator(accumulator,value);
});
return accumulator;
};

我尝试使用each来迭代嵌套数组,如果toFlatten是数组,它将把value推送到array。如果它不是数组,它会将累积的 flat 数字推送到数组...为什么它不起作用?

 function flatten(array){
return reduce(array,function(flat,toFlatten){
return each(toFlatten,function(value){
if(Array.isArray(toFlatten)){
return array.push(value);
}
});
return array.push(flat)
},[]);
};



flatten([[1,2,3],2,3,[3,4,5],5,6]); //nothing returned
flatten([[1,2,3],2,3,[3,[4,7],5],5,6]);

更新答案:

function flatten(array) {
return reduce(array,function(flat,toFlatten){
if(Array.isArray(toFlatten)){
each(toFlatten,function(value){
flat.push(value);

});

}else{

flat.push(toFlatten)


}

return flat;

},[]);

}

最佳答案

这是您的示例,稍作更改(请参阅评论)并使用 Array.prototype.map()Array.prototype.forEach() :

function flatten(array) {
return array.reduce(function (flat, toFlatten) {
if (Array.isArray(toFlatten)) {
// if it is an array, iterate it and push each value to flatted result
toFlatten.forEach(function (value) {
if (Array.isArray(toFlatten)) {
flat.push(value);
}
});
} else {
// if it is not an array, just push the value to result
flat.push(toFlatten);
}
return flat; // return new flatted result
}, []);
};

flatten([[1, 2, 3], 2, 3, [ 3, 4, 5 ], 5, 6]);
// Array [ 1, 2, 3, 2, 3, 3, 4, 5, 5, 6 ]

但是你可以通过调用 Array.prototype.concat() 上的 apply 方法来使其更短:

Array.prototype.concat.apply([], [[1, 2, 3], 2, 3, [ 3, 4, 5 ], 5, 6]);

您还可以将它用于深度嵌套数组:

var array = [[1, 2, 3], 2, 3, [3, [4, 7], 5], 5, 6];
while(array.some(Array.isArray)) {
array = Array.prototype.concat.apply([], array);
}
console.log(array);

关于javascript - javascript中使用reduce和each压平函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34363046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com