我有一个JavaScript数组,如:
[["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"]]
Run Code Online (Sandbox Code Playgroud)
我将如何将单独的内部数组合并为:
["$6", "$12", "$25", ...]
Run Code Online (Sandbox Code Playgroud) 我试图在保留顺序的同时展平嵌套数组,例如[[1, 2], 3, [4, [[5]]]]
应该转换为[1, 2, 3, 4, 5]
.
我正在尝试使用递归来执行此操作,但下面的代码不起作用,我不明白为什么.我知道还有其他方法可以做到这一点,但我想知道这有什么问题.
function flatten (arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
flatten(arr);
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
flatten([[1, 2], 3, [4, [[5]]]]);
Run Code Online (Sandbox Code Playgroud)
谢谢
美好的一天!
任务是获得一个数组的平面版本,可能包括一些嵌套数组以及其他元素.用于预期的输入[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;
}
Run Code Online (Sandbox Code Playgroud)
它确实是这样的.样本运行的结果将是:
pushing: 1
pushing: 2
pushing: 3
pushing: 4
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
问题是:当我们使用concat添加nestedElements …
我想编写一个可以深度展平给定数组的函数。例如:
deepFlatten([]); // []
deepFlatten([1, 2, 3]); // [1, 2, 3]
deepFlatten([[1, 2, 3], ["a", "b", "c"], [1, 2, 3]]); // [1, 2, 3, "a", "b", "c", 1, 2, 3]
deepFlatten([[3], [4], [5]], [9], [9], [8], [[1, 2, 3]]]); // [3, 4, 5, 9, 9, 8, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我尝试递归地解决这个问题,到目前为止我已经得到了这个:
var deepFlatten = function (array){
var result = [];
array.forEach(function (elem) {
if (Array.isArray(elem)) {
result.concat(deepFlatten(elem)); // problem probably lies here
} else {
result.push(elem);
}
});
return result;
}; …
Run Code Online (Sandbox Code Playgroud) javascript recursion concatenation flatten multidimensional-array
这个递归展平函数的运行时间是多少?我的猜测是它是线性的;有人可以解释为什么吗?
const arr = [
[14, [45, 60], 6, [47, [1, 2, [14, [45, 60], 6, [47, [1, 2]], 9]]], 9],
];
function flatten(items) {
const flat = [];
items.forEach(item => {
if (Array.isArray(item)) {
flat.push(...flatten(item));
} else {
flat.push(item);
}
});
return flat;
}
Run Code Online (Sandbox Code Playgroud)