在不丢弃其余键的情况下更改对象的键值

Posted

技术标签:

【中文标题】在不丢弃其余键的情况下更改对象的键值【英文标题】:Changing key value of object without discarding rest of keys 【发布时间】:2019-12-16 04:38:51 【问题描述】:

我想用下划线替换所有传入对象中特定键的空格。它可以工作,但是其余的键消失了。

对象:

  
    "id": "235",
    "reference": "AA",
    "name": "Jake H",
  ,
  
    "id": "668",
    "reference": "TC",
    "name": "Felix S",
  

实际结果:

["Jake_H", "Felix_S"]

方法:

import jsonResults from './results.json'
  data() 
    return 
      results: [],
    
  ,
  mounted() 
    const filteredResults = jsonResults

      // I have other incoming objects that do not have names.
      .filter(result => result.name)
      .map(
        result => result.name.replace(' ', '_')
      )
    this.results = filteredResults
  

我希望只更改键值,但结果是对象的其余部分被丢弃。

期待

  
    "id": "235",
    "reference": "AA",
    "name": "Jake_H",
  

实际

["Jake_H"]

【问题讨论】:

【参考方案1】:

由于 ES6 箭头函数的隐式返回,您正在返回 result.name.replace(...) - 修改后返回 result。解构在这里很有用,就像传播一样:

.map(( name, ...r ) => ( ...r, name: name.replace(/ /g, "_")));

另一种方式:

.map(result => 
  result.name = result.name.replace(/ /g, "_");
  return result;
);

【讨论】:

【参考方案2】:

您还需要在 map 方法中返回其他属性,以及修改后的name 属性。

const filteredResults = jsonResults
          .filter(result => result.name)
          .map(
            result => 
              return 
                ...result,
                name: result.name.replace(' ', '_')
              
            
          )

【讨论】:

【参考方案3】:

您正在返回 map 函数中的名称:

result => result.name.replace(' ', '_')

宁可这样做:

result =>  result.name = result.name.replace(' ', '_'); return result; 

【讨论】:

以上是关于在不丢弃其余键的情况下更改对象的键值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不影响未分阶段更改的情况下丢弃 git 中的分阶段更改 [重复]

如何在不干扰 iOS 中键值对序列的情况下读写 json 文件?

Movilizer:在不更改数组键的情况下对数据容器进行排序

如何在没有目标c的键的情况下解析json第一个对象?

在不知道对象键的情况下访问对象值

此类不是键的键值编码兼容的键