[英]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.