Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 深度数组节点中的合并数组_Javascript_Arrays_Node.js_Ecmascript 6_Lodash - Fatal编程技术网

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;
}