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

时间:2019-08-08 12:52:08

标签: javascript arrays object vue.js ecmascript-6

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

对象:

  {
    "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"]

3 个答案:

答案 0 :(得分:4)

由于ES6箭头函数的隐式返回,您将返回result.name.replace(...)-修改后返回result。销毁和扩散在这里都很有用:

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

备用方式:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您将返回sed函数中的唯一名称:

map

因此,请这样做:

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