gpt4 book ai didi

javascript - 用于递归展平结果的 JS 数组串联

转载 作者:数据小太阳 更新时间:2023-10-29 06:10:16 26 4
gpt4 key购买 nike

美好的一天!

任务是获取数组的平面版本,其中可能包含一定数量的嵌套数组以及其他元素。对于输入 [1, [2], [3, [[4]]]] 输出 [1, 2, 3, 4] 预期。FreeCodeCamp 剧透警报。自然而然地,递归解决方案浮现在脑海中,例如:

function steamrollArray(arr) {
var result = [];
for(var i = 0; i < arr.length; i++){
//part of interest
if (Array.isArray(arr[i])){
var nestedElements = steamrollArray(arr[i]);
for(var j = 0; j < nestedElements.length; j ++){
result.push(nestedElements[j]);
}
//</part of interest>.
} else {
console.log("pushing: " + arr[i]);
result.push(arr[i]);
}
}
return result;
}

它做到了。样本运行的结果将是:

pushing: 1
pushing: 2
pushing: 3
pushing: 4
[1, 2, 3, 4]

问题是:当我们使用 concat 添加 nestedElements(据说存储递归调用的返回结果)时出了什么问题。如果我们要使用以下代码段更改 for 循环中的第一个 if{} block (标记为感兴趣的部分):

if (Array.isArray(arr[i])){
var nestedElements = steamrollArray(arr[i]);
result.concat(nestedElements);
} else {

我们将观察到以下结果:

pushing: 1
pushing: 2
pushing: 3
pushing: 4
[1]

我的理解是将每次递归调用的结果传递给 concat 函数,这会将返回的数组添加到结果中,但由于某些原因并非如此。有人询问了有关此任务的问题,例如 this one , 但那些与扁平化算法部分有关的人,这里不予质疑。我仍然看不出究竟是什么导致了差异的答案。这很可能是我在麻烦中或由于我有限的经验而忽略的事情。抱歉,如果是这样的话。

最佳答案

Array#concat返回一个包含结果的新数组。

The concat() method returns a new array comprised of the array on which it is called joined with the array(s) and/or value(s) provided as arguments.

所以你需要分配结果:

result = result.concat(nestedElements);
// ^^^^^^ assignment

关于javascript - 用于递归展平结果的 JS 数组串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287320/

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