gpt4 book ai didi

javascript - 对象中的最高值(如果有更多最大值并且它们相同,则更多)

转载 作者:行者123 更新时间:2023-12-01 21:47:41 25 4
gpt4 key购买 nike

假设我有这样的对象:

var obj = {a : 5, b : 10, c : 15, d : 20, e : 20, f : 25};

我想获得前 3 个最高值 - 请注意 de 键具有相同的值,我也需要获得键,所以它看起来喜欢:

Highest values:
f - 25
d - 20
e - 20

如果有例如六个值和四个相同:

var obj2 = {a:1, b:1, c:1, d:1, e:0,8, f: 0,5};

我需要显示 4 最高。

Highest values:
a-1
b-1
c-1
d-1

我猜想需要遍历所有对象属性来获取 Math.max,但我还需要一些东西来计算 3 个最大值,如果有更多的最大值(都一样)我需要“全部拿走!”。

编辑:atm 有很好的答案,所以我想我不会完成这段代码,只使用给定的例子:)

最佳答案

这是一个示例实现,带有注释来解释每一步发生的事情。

function maxValues(o, n) {
// Get object values and sort descending
const values = Object.values(o).sort((a, b) => b - a);

// Check if more values exist than number required
if (values.length <= n) return o;

// Find nth maximum value
const maxN = values[n - 1];

// Filter object to return only key/value pairs where value >= maxN
return Object.entries(o)
.reduce((o, [k, v]) => v >= maxN ? { ...o, [k]: v } : o, {});
}

const a = maxValues({
a: 5,
b: 10,
c: 15,
d: 20,
e: 20,
f: 25
}, 3);
console.log(a);

const b = maxValues({
a: 1,
b: 1,
c: 1,
d: 1,
e: 0.8,
f: 0.5
}, 3);
console.log(b);

const c = maxValues({
a: 5,
b: 10,
}, 3);
console.log(c);

传递给 Array.prototype.reduce 函数的回调可以扩展为以下内容:

return Object.entries(o)
.reduce(function (obj, [key, value]) {
if (v >= maxN) {
return Object.assign(obj, {
[key]: value
});
} else {
return obj;
}
}, {});

相反,我使用 Arrow Function Expression 压缩了它, ternary operator , 和 spread syntax .

三元运算符本质上是 if/else 语句的简写。例如

condition ? true : false;
// or
v >= maxN ? { ...o, [k]: v } : o;

扩展语法允许一个可迭代的值被原地扩展。在本例中,它用于将现有的 key/value 对从一个对象字面量复制到另一个对象字面量。

const a = { first_name: 'Rob', gender: 'male' };
const b = { ...a, username: 'fubar' };

console.log(b); // { first_name: 'Rob', gender: 'male', username: 'fubar' };

关于javascript - 对象中的最高值(如果有更多最大值并且它们相同,则更多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60105631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com