【问题标题】:How can I keep same object but replace only one property?如何保留相同的对象但只替换一个属性?
【发布时间】:2018-06-02 06:12:22
【问题描述】:

假设这是我的对象数组:

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

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

谢谢。

【问题讨论】:

  • 您是否总是拥有完全包含 lastname: '- Doe' 而您不想替换的对象属性,或者它们是否总是匹配某种模式,或者以破折号和空格开头的实例?跨度>
  • 您想从 Doe 值中删除“ - ”或使其成为整个对象数组,您并不具体

标签: javascript jquery arrays lodash


【解决方案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);

【讨论】:

    【解决方案2】:

    使用 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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多