为啥 async.map 返回多个数组副本?

Posted

技术标签:

【中文标题】为啥 async.map 返回多个数组副本?【英文标题】:Why async.map returns multiple copies of array?为什么 async.map 返回多个数组副本? 【发布时间】:2021-01-05 00:40:45 【问题描述】:
const async = require('async');

const arr = [
     name: 'john', id: '1' ,
     name: 'Andrie', id: '2' ]

let collectArr = [];
let data = async.mapLimit(arr, 5, async function (input) 

    collectArr.push( name: input.name, id: input.id );
    return collectArr;
)

data.then((result) =>
    console.log('success',result);
).catch(e => console.log('err'));

因此,我在这里向 async.mapLimit 提供数组,而无需回调并在这里期待承诺。 预期输出:- [ name: 'john', id: '1' , name: 'Andrie', id: '2' ] ,

得到结果:-

[ [ name: 'john', id: '1' , name: 'Andrie', id: '2' ], [名称:'约翰',id:'1',名称:'Andrie',id:'2']]

所以我的问题是它为什么要创建多个数组副本,如何处理?

【问题讨论】:

【参考方案1】:

当您只想返回新对象时,您会不必要地返回一个子数组,并且每次迭代都引用同一个数组。

let data = async.mapLimit(arr, 5, async function (input) 
    return  name: input.name, id: input.id ;   
);

不知道为什么你需要它是异步的

【讨论】:

您能否提供一些关于异步的指南,因为我无法在描述所有信息的地方找到它。官方文档不是很好 我从未使用过这个库,但概念与 Array#map() 相同,限制参数略有不同 好的,我去看看地图看看

以上是关于为啥 async.map 返回多个数组副本?的主要内容,如果未能解决你的问题,请参考以下文章

Numpy常用概念-对象的副本和视图向量化广播机制

为啥我的数组在 C 中返回错误的值?

在 numpy 数组的末尾附加 n 个数组副本

JS 数组方法

async.map 不会在 nodejs 中调用回调

自下而上建堆(heap)的时间复杂度证明