簡體   English   中英

如何在 JS object 中獲取特定嵌套屬性的所有值

[英]How to get all values of specific nested property in JS object

我似乎找不到滿意的答案,如果這個問題是重復的問題,我很抱歉,也許我什至不知道如何表達我想要實現的目標。

所以無論如何這是示例代碼:

var characters = {
  hero: {
    name: 'player',
    hp: 100,
    moves: {
      attack1: {
        damage: 10
      },
      attack2: {
        damage: 20
      },
      attack3: {
        damage: 30
      }
    }
  }
}

我想做的是為損壞值編寫一個選擇器,將它們分成兩半或一次對所有這些值進行任何其他數學運算。 現在我一直在用控制台日志檢查不同的語法

console.log(characters.hero.moves[what here?].damage);

但我不知道下一步該做什么,只獲取整數,然后編輯它們。 我已經知道 * 在這里對 select 不起作用。 這是我第一次使用對象。 例如,是否有必要為 function 寫一個? 我不希望它變成數組或任何東西,因為我看到了一些使用它們的答案。 我只想獲得這些值並一次更改它們以乘以,除以,增加或減少它們。

 //fixed error:D var characters = { hero: { name: 'player', hp: 100, moves: { attack1: { damage: 10 }, attack2: { damage: 20 }, attack3: { damage: 30 } } } } //the following function takes in ONE function as its argument //this argument function is given a number(a damage number) //the number the argument function returns become the new damage number function editDmg(fn){ var moves=characters.hero.moves Object.keys(moves).forEach(a=>moves[a].damage=fn(moves[a].damage)) } //example usage editDmg( n=>n*2 //multiplies all dmg values by 2(you can do any math equation like n=>n_based_equation_here) ) console.log(characters) //second use to prove i've fixed it editDmg(n=>n/2) console.log("for a second time",characters)

好吧,你有一個moves ( move ) 有其他對象。 您可以將 map的每個值moves object 到某個嵌套值。

您可以使用Object.values (它返回一個包含給定對象的所有值的數組),然后使用Array.prototype.map進行映射。

就像是:

 const characters = { hero: { name: 'player', hp: 100, moves: { attack1: { damage: 10 }, attack2: { damage: 20 }, attack3: { damage: 30 } } } }; const movesDamage = Object.values(characters.hero.moves).map((move) => move.damage); console.log(movesDamage); //=> [10, 20, 30]

理想情況下,您的 move 屬性將是一個數組,但是,鑒於您擁有的數據(並假設每個“attackN”屬性都是一個 object 具有一個稱為損壞的單個屬性,那么:

var movesKeys = Object.keys(characters.hero.moves);

for (var key in movesKeys)
{
    var attackObject = characters.hero.moves[key];
    attackObject.damage = attackObject.damage * 2; // double the damage
}

總結所有傷害值:

characters.hero.moves.attack1.damage + characters.hero.moves.attack2.damage + characters.hero.moves.attack3.damage

如果你不知道英雄有多少次攻擊使用這個:

var total_damage = 0;
Object.keys(characters.hero.moves).forEach(function(key) {
  total_damage += characters.hero.moves[key].damage;
});
console.log(total_damage);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM