p7a*_*ams 0 javascript loops object max data-structures
我有一个这样的对象:
const users = {
adam: {
age: 28,
extraInfo: 'foobar',
},
brad: {
age: 31,
extraInfo: 'foobar',
},
jef: {
age: 12,
extraInfo: 'baarfoo',
},
};
Run Code Online (Sandbox Code Playgroud)
如何检查哪个对象具有“ age”属性的最高值并将该对象设为常量?
我尝试过使用Object.keys(),将数据抛出到Array并进行减少,但最后,所有这些方法都无法按我的意愿工作。我已经在这个问题上停留了几个小时。
您可以使用reduce函数查找寿命最长的对象。
基本上,该reduce函数将users使用其键循环对象,并将根据age值更改累加器。
该解决方案的“关键”是:
const result = Object.keys(users). reduce((acc, curr) =>
acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {});
Run Code Online (Sandbox Code Playgroud)
工作原理:
Object.keys(users):在您的情况下,此函数从特定对象返回键数组["adam", "brad", "jef"]。
该reduce函数将循环键数组,并保持accumulator(当前最高年龄)和currentValue(源Array中的当前项Object.keys(users))。
acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {})该条件计算的电流值accumulator和currentValue
要求,acc.age因为reduce函数以空的initialValue开头{}:
用作首次调用回调的第一个参数的值。如果未提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用reduce()是错误的。
如果acc.age具有以前的值,则此条件(users[curr].age > acc.age ? users[curr] : acc) : users[curr]将在accumulator 和之间进行currentValue选择(选择最高年龄)。
const result = Object.keys(users). reduce((acc, curr) =>
acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {});
Run Code Online (Sandbox Code Playgroud)
@irkeninvader使用for-loop以下方法建议的解决方案:
const users = {
adam: {
age: 28,
extraInfo: 'foobar',
},
brad: {
age: 31,
extraInfo: 'foobar',
},
jef: {
age: 12,
extraInfo: 'baarfoo',
},
};
const result = Object.keys(users).reduce((acc, curr) =>
acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {});
console.log(result)Run Code Online (Sandbox Code Playgroud)