gpt4 book ai didi

javascript - 如何从数组和已存在的对象创建新对象?

转载 作者:行者123 更新时间:2023-11-28 01:25:24 24 4
gpt4 key购买 nike

我正在尝试从现有的对象和数组创建一个具有修改后的属性名称的对象。

var ExistingObj = {'123' : 50, '456' : 60, '789' : 90}; 
var idsArr = ['123', '456', '789'];

我想创建一个包含以下内容的对象数组:

var newArr = [{id : '123', amount: 50}, {id: '345', amount: 60}, {id:'789' : 90}];  

我尝试像这样映射它,但它不起作用:

var existingObj = {'123' : 50, '456' : 60, '789' : 90}; 
var idsArr = ['123', '456', '789'];


function formatArr(idsArr, existingObj){
var obj = {};
var container = [];

_.map(idsArr, function(id){
obj.id = id;
obj.amount = existingObj[id];
container.push(obj);
});
return container;
}

结果是:

container = [{'id' : '789', 'amount' : 90}, {id : '789', 'amount' : 90}, {id:'789', 'amount' : 90}];  

有什么想法吗?

最佳答案

您当前的方法在 _.map 函数中重用相同的对象 (var obj = {};),因为它是在 _.map< 外部定义的 调用。因此,在每一步中,您都会修改同一个对象,然后将其插入容器变量中。再次。然后再次。再次。

这就是为什么您会得到一组相同的记录 - 事实上,它们是对同一对象的引用。

显然,这是错误的。但更错误的是在 _.map 函数中使用 push :该函数的主要目的是基于其他一些集合构建一个数组,并且无需添加您自己的代码来执行此操作。可以这样写:

function formatArr(idsArr, existingObj) {
return _.map(idsArr, function(id){
return {
id: id,
amount: existingObj[id]
});
});
}

顺便说一句,使用 _.map 而不存储其结果几乎总是逻辑错误。如果您不关心迭代结果,请使用_.each

关于javascript - 如何从数组和已存在的对象创建新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22737496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com