如何保留同一个对象但只替换一个属性?

时间:2017-12-19 18:38:14

标签: javascript jquery arrays lodash

让我们说这是我的对象数组:

let data = [{
              firstname: 'John',
              lastname: 'Doe'
             },
             {
              firstname: 'Jane',
              lastname: '- Doe'
             }]

现在,我想创建一个新对象,但在- Doe的位置我需要删除此部分-并仅保留Doe

我试过这个:

let pollyData = data.map(item => _.mapValues(item, val => val.lastname.split('- ').pop()))

但是,我得到undefined

有没有更好的方法来实现这一目标?

感谢。

2 个答案:

答案 0 :(得分:3)

使用Array#map迭代。检查对象是否包含带有破折号的lastname。如果是这样,请使用清理的姓氏创建一个新对象。如果没有返回原始对象。

注意:我已使用object spread替换lastname。如果构建堆栈不支持,则可以改为使用Object.assign({}, obj, { lastname: obj.lastname.replace(/^-\s+/, '') })

const data = [{
    firstname: 'John',
    lastname: 'Doe'
  },
  {
    firstname: 'Jane',
    lastname: '- Doe'
  }
];

const result = data.map((obj) => obj.lastname.includes('-') ? ({
  ...obj,
  lastname: obj.lastname.replace(/^-\s+/, '')
}) : obj);

console.log(result);

答案 1 :(得分:1)

您可以使用正则表达式和array#map



let data = [{ firstname: 'John', lastname: 'Doe' }, { firstname: 'Jane', lastname: '- Doe' }];
var result = data.map(({firstname, lastname}) => 
  ({firstname, lastname: lastname.replace(/^\s*\-\s*/g, '')})
);
console.log(result);