在多个对象中替换相同的值

时间:2018-07-15 20:06:06

标签: javascript

所以这让我头疼了很长时间:

{
  "gravetender": {
    "musicTokens": 2
  },
  "Bob-chan": {
    "musicTokens": 3
  }
}

我只是想将所有musicTokens设置为5,无论名称如何。我已经尝试过forEachfor in。 这是目前更改单个用户的musicTokens的原因:

client.profiles [message.author.username].musicTokens = 5;

我的client.profiles是我的JSON,message.author.username获得了名称,而.musicTokens则指向了变量。

我正在寻找类似client.profiles.*.musicTokens = 5

的东西

谢谢

3 个答案:

答案 0 :(得分:1)

使用Object.values()Array#forEach()

const client = {
  "profiles": {
    "gravetender": {
      "musicTokens": 2
    },
    "Bob-chan": {
      "musicTokens": 3
    }
  }
}

Object.values(client.profiles).forEach(profile => {
  profile.musicTokens = 5
})

console.log(client.profiles)

答案 1 :(得分:1)

 for(const profile of Object.values(client.profiles))
    profile.musicTokens = 5;

答案 2 :(得分:0)

在潜在的第三方插件之外,没有JavaScript方式可以做到这一点。您必须像这样遍历它们

假设客户端是一个js对象

let userNames = Object.keys(client.profiles);
usernames.forEach(username => {
    client.profiles[username].musicTokens = 5;
});

您可以使用Map类在原处对其进行迭代

假设client.profiles是Map对象

client.profiles.forEach(profile => profile.musicTokens = 5);

让client.profiles通过js对象映射

client.profiles = new Map(Object.entries(client.profiles));

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach