Javascript 深度数组节点中的合并数组
我的结构如下:Javascript 深度数组节点中的合并数组,javascript,arrays,node.js,ecmascript-6,lodash,Javascript,Arrays,Node.js,Ecmascript 6,Lodash,我的结构如下: const array = [ [ [ [ [ { 'name':'John' } ], { 'name':'Mary' } ], { 'name':'Cris' } ], { 'name':'Deen' } ],
const array = [
[
[
[
[
{
'name':'John'
}
],
{
'name':'Mary'
}
],
{
'name':'Cris'
}
],
{
'name':'Deen'
}
],
{
'name':'Bob'
}
]
因此,我想得到以下结构:
const expect = [
{
'name':'John'
},
{
'name':'Mary'
},
{
'name':'Cris'
},
{
'name':'Deen'
},
{
'name':'Bob'
},
]
如何使用lodash
或其他库进行此类转换?您可以使用lodash:
递归地展平数组
const数组=[name:'John'}]、{name:'Mary'}]、{name:'Cris'}]、{name:'Deen'}]、{name:'Bob'}];
console.log((数组))代码>
。作为控制台包装{最大高度:100%!重要;顶部:0;}
您可以使用reduce()
创建递归函数以返回所需的结果
const数组=[[[[[name:“John”}],[name:“Mary”}],[name:“Cris”}],[name:“Deen”}],[name:“Bob”}]
函数展平(arr){
返回arr.reduce(函数(r,e){
返回r=r.concat(Array.isArray(e)?展平(e):e),r
}, [])
}
console.log(展平(数组))
函数展平数组(数组,结果){
结果=结果| |[];
对于(var i=0;i
这是我很久以前写的。采用递归方法,速度也非常快
JSPerf:您可以使用此npm包,这是一个简单的示例:
var=require('下划线-node');
var extractedArray=uu.flant(deepArray)
通过纯ES6和通过解构实现的Haskell式模式匹配,您可以简单地执行以下操作:
函数平面([a,…b]){
返回(数组。isArray(a)-平坦(a):[a])。concat(b.长度-平坦(b):[]);
}
var arr=[[[[[[[name:“John”}],[name:“Mary”}],[name:“Cris”}],[name:“Deen”}],[name:“Bob”}],
res=平坦(arr);
控制台日志(res)代码>您可以使用闭包和ES6的一行代码来完成。图书馆在没有必要的时候是一种负担。尽可能避免它们
const flatte=arr=>arr.reduce((r,e)=>(r=r.concat(Array.isArray(e)→flatte(e):e,r),[]);
常量数组=[
[
[
[
[{
“姓名”:“约翰”
}],
{
“姓名”:“玛丽”
}
],
{
“name”:“Cris”
}
],
{
“name”:“Deen”
}
],
{
“姓名”:“鲍勃”
}
];
console.log(展平(数组))
没有任何库并使用良好的旧JS逻辑的最佳方式:
var-arr=[
[
[
[
[
{
“姓名”:“约翰”
}
],
{
“姓名”:“玛丽”
}
],
{
“name”:“Cris”
}
],
{
“姓名”:“迪恩”
}
],
{
“姓名”:“鲍勃”
}
];
//转换为字符串并删除所有数组“[”和“]”符号
var str=JSON.stringify(arr).replace(/\[|]/g');
//将字符串转换回对象(数组)
var flatArr=JSON.parse(“[”+str+“]);
console.log(flatArr)
考虑使用。它对于内存中的数据结构处理非常强大(只要你仔细考虑它)
下面是你如何解决你的例子
//const objectScan=require('object-scan');
常量find=(输入)=>objectScan(['**']{
反面:错,
rtn:'值',
filterFn:({value})=>typeof value.name==='string'
})(输入);
常量数组=[[name:'John'}]、{name:'Mary'}]、{name:'Cris'}]、{name:'Deen'}]、{name:'Bob'}];
log(查找(数组));
//=>[{name:'John'},{name:'Mary'},{name:'Cris'},{name:'Deen'},{name:'Bob'}]
。作为控制台包装{最大高度:100%!重要;顶部:0}
你为什么不表现出你的努力呢?您的代码在哪里?不难找到如何在有限的web搜索时间内展平数组,并在lodash文档中进行一些挖掘,这不是合并,而是展平。你把这个词搞混了我从没想过这一天会到来@阿罗,你什么意思?你用了洛达斯。所有高阶函数都是敌人。@Arrow,hm。这种使用并不能证明产品的合理性。让我们来看看。
function flattenArray(array, result) {
result = result || [];
for (var i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
flattenArray(array[i], result);
} else {
result.push(array[i]);
}
}
return result;
}