展平javascript多维嵌套数组

展平javascript多维嵌套数组,javascript,Javascript,我正在尝试展平阵列,但遇到了困难 我的代码: var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]]; var res=[].concat.apply([],arr); //使用reduce(ES5) 功能测试(args){ var sum=args.reduce(函数(acc,val){ acc.concat(阵列isArray(val)?测试(val):val; }); } //定期执行 功能测试2(arr){ var结果=[]; arr.forEach(功能(v

我正在尝试展平阵列,但遇到了困难

我的代码:

var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]];
var res=[].concat.apply([],arr);
//使用reduce(ES5)
功能测试(args){
var sum=args.reduce(函数(acc,val){
acc.concat(阵列isArray(val)?测试(val):val;
});
}
//定期执行
功能测试2(arr){
var结果=[];
arr.forEach(功能(val){
if(数组isArray(val)){
结果=[].concat.apply([],val);
}否则{
结果:concat(val);
}
});
返回结果;
}
控制台日志(测试(arr));

日志(test2(arr))因为它是嵌套结构,所以应该使用
递归

思维方式
  • 循环传递的数组并检查当前项是否为数组
  • 如果是,请重复该过程
  • 如果不是,则将值推送到临时数组
  • 将每个递归的返回值合并到上一个递归
数组.forEach
var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]];
函数getFlattArray(数组){
var_tmp=[];
array.forEach(函数(项){
if(阵列isArray(项目)){
_tmp=_tmp.concat(getFlattArray(项))
}
否则{
_tmp推送(项目);
}
})
返回tmp;
}
var结果=GetFlattArray(arr);

console.log(result)
因为它是一个嵌套结构,所以应该使用
递归

思维方式
  • 循环传递的数组并检查当前项是否为数组
  • 如果是,请重复该过程
  • 如果不是,则将值推送到临时数组
  • 将每个递归的返回值合并到上一个递归
数组.forEach
var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]];
函数getFlattArray(数组){
var_tmp=[];
array.forEach(函数(项){
if(阵列isArray(项目)){
_tmp=_tmp.concat(getFlattArray(项))
}
否则{
_tmp推送(项目);
}
})
返回tmp;
}
var结果=GetFlattArray(arr);
console.log(结果)
就是这样。这么简单

var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]];
功能测试2(arr){
返回arr.toString().split(“,”);
}
日志(test2(arr))就是这样。这么简单

var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]];
功能测试2(arr){
返回arr.toString().split(“,”);
}

日志(test2(arr))我认为我链接到您的代码不起作用的原因是您可能犯了与我相同的错误。我相信(不需要真正查找,如果我错了,有人会纠正我)arrow函数会自动返回最后一行,因此在将代码转换为ES5时,您会忘记返回
arr.reduce(…)

这对我来说很有用,Windows上的Chrome

var-arr=[
["2"],
["3", "4"], "5", [
["6"],
["7"]
]
];
函数展平(arr){
返回arr.reduce(功能(acc、val){
返回acc.concat(数组.isArray(val)?展平(val):val;
}, []);
}

控制台日志(展平(arr))我认为我链接到您的代码不起作用的原因是您可能犯了与我相同的错误。我相信(不需要真正查找,如果我错了,有人会纠正我)arrow函数会自动返回最后一行,因此在将代码转换为ES5时,您会忘记返回
arr.reduce(…)

这对我来说很有用,Windows上的Chrome

var-arr=[
["2"],
["3", "4"], "5", [
["6"],
["7"]
]
];
函数展平(arr){
返回arr.reduce(功能(acc、val){
返回acc.concat(数组.isArray(val)?展平(val):val;
}, []);
}
控制台日志(展平(arr))
var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]];
var展平=arr展平(无穷大);
控制台日志(展平)
var arr=[“2”]、[“3”、“4”]、“5”、[“6”]、[“7”]];
var展平=arr展平(无穷大);

控制台日志(展平)
@Jhecht我确实尝试过,但它是用ES6编写的。我已经添加了我的ES5版本,但不确定我在那里做错了什么。它给我的是未定义的。@Andreas的可能重复项不确定这是否是完全重复项,因为OP指的是嵌套结构<代码>[[]]、[[]]
和非
[[]]、[]]、[]]
@Rajesh->
扁平化([[[1,1.1]]、2,3]、[4,5]];//[1,1.1,2,3,4,5]
@Jhecht我最初确实尝试过,但它是用ES6编写的。我已经添加了我的ES5版本,但不确定我在那里做错了什么。它给我的是未定义的。@Andreas的可能重复项不确定这是否是完全重复项,因为OP指的是嵌套结构<代码>[[]]、[[]]
和非
[[]]、[]]、[]]
@Rajesh->
扁平化([[[1,1.1]]、2,3]、[4,5]];//[1,1.1,2,3,4,5]
damn。。非常感谢。这很有帮助。。你能给我一个数组的解决方案吗?减少?该死。。非常感谢。这很有帮助。。你能给我一个关于数组的解决方案吗?减少?啊,聪明的方法,应该是公认的答案。只适用于不带逗号的字符串数组。不适用于
[{foo:1}、[{age:2}、{foo:3}]
['a string,has commas']
我回答了OP的问题。有不同的情况。当JavaScript在浏览器上运行时,每一行代码对于保持效率更为重要。在这种情况下,这一行是最有效的。啊,聪明的方法应该是公认的答案。只适用于不带逗号的字符串数组。不适用于
[{foo:1}、[{age:2}、{foo:3}]
['a string,has commas']
我回答了OP的问题。有不同的情况。当JavaScript在浏览器上运行时,每一行代码对于保持效率更为重要。在这种情况下,这条线是最有效的。