我有两个数组
typeArr = [1010111,23342344]
infoArr={'name':'jon,'age':25}
我期待以下
[{'name:'jone','age':25,'type':1010111,'default':'ok'},{'name:'jone','age':25,'type':23342344,'default':'nok'}]
代码:
updaterecord(infoArr,type)
{
infoArr.type=type;
response = calculate(age);
if(response)
infoArr.default = 'ok';
else
infoArr.default = 'nok';
return infoArr;
}
createRecord(infoArr,typeArr)
{
var data = _.map(typeArr, type => {
return updaterecord(infoArr,type);
});
return (data);
}
var myData = createRecord(infoArr,typeArr);
我正在
[{'name:'jone,'age':25.'type':23342344,'default':nok},{'name:'jone,'age':25.'type':23342344,'default':nok}]
由于某种原因,最后一条记录更新了前一条记录。我已经尝试使用index var生成数组,但不确定它是否有问题,它会覆盖前一项。
如何解决此问题
答案 0 :(得分:1)
您正在将整个infoArr
数组传递给updaterecord()
函数,但updaterecord()
看起来似乎只有一个对象。因此,它将这些属性添加到数组而不是数组的单个成员。
由于typeArr
有两个元素且infoArr
有两个元素,因此不应该发生什么事情。是否要将另一个添加到infoArr
或infoArr
与typeArr
具有相同数量的元素。
假设它应该具有相同的数字,您需要使用索引,_map
可让您从infoArr
发送每个项目:
function createRecord(infoArr,typeArr) {
var data = _.map(typeArr, (type, i) => {
// use infoArr[i] to send one element
return updaterecord(infoArr[i],type);
});
return (data);
}
我不确定你是如何计算default
的,因为它与你的预期输出有所不同,但是基于一个数字。要获取基于infoArray
的对象数组,您需要复制对象并添加所需的其他属性。 Object.assign()
对此有好处:
let typeArr = [1010111,23342344]
let infoArr={'name':'jon','age':25}
function updaterecord(infoArr,type){
var obj = Object.assign({}, infoArr)
return Object.assign(obj, {
type: type,
default: infoArr.age > 25 ? 'ok' : 'nok' //or however your figuring this out
})
}
function createRecord(infoArr,typeArr) {
return _.map(typeArr, type => updaterecord(infoArr,type));
}
结果:
[ { name: 'jon', age: 25, type: 1010111, default: 'nok' },
{ name: 'jon', age: 25, type: 23342344, default: 'nok' } ]