节点js和lodash中的数组操作

时间:2017-11-11 22:33:14

标签: node.js lodash

我有两个数组   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生成数组,但不确定它是否有问题,它会覆盖前一项。

如何解决此问题

1 个答案:

答案 0 :(得分:1)

您正在将整个infoArr数组传递给updaterecord()函数,但updaterecord()看起来似乎只有一个对象。因此,它将这些属性添加到数组而不是数组的单个成员

由于typeArr有两个元素且infoArr有两个元素,因此不应该发生什么事情。是否要将另一个添加到infoArrinfoArrtypeArr具有相同数量的元素。

假设它应该具有相同的数字,您需要使用索引,_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' } ]