我正在尝试比较 Javascript 对象中的两个元素。具有最高值(value)的字母应与其携带的数字一起返回。
这是对象,我们应该返回 a 和 39。
obj({a:39,b:21,c:12,d:4}) // should return a : 39
到目前为止,这是我的代码。
let obj = object => {
for(let i in object) { // i represents the "key" of the objects, a,b,c,d
if(object[i] > object[i + 1]) { // object[i] represents the "value" held 39,21,12,4
console.log(i + ":" + object[i]);
} else {
console.log(i + ":" + object[i]);
}
}
}
obj({a:39,b:21,c:12,d:4})
我认为 if 语句中的 object[i + 1] 会将下一个索引元素与当前元素进行比较,但事实并非如此,您将如何实现这一点?
编辑 如果有两个元素具有相同的值则返回这两个元素
对于像我这样刚接触编码的人来说,这可能是完成此任务的最简单方法。此代码返回对象中保存的最大数字。
let getMax = (obj) => {
let highestValue = 0;
for(var i in obj) {
if(highestValue < obj[i]) {
highestValue = obj[i];
} else if (highestValue == obj[i]) {
highestValue = highestValue + " " + obj[i];
}
}
alert(highestValue);
}
getMax({John:300000,Kary:360000,David:2700000,Michelle:2700000})
最佳答案
在每次迭代中检查当前或先前的键值是否最大,并存储。将最大的存储在 largest
变量中。最后返回largest
变量,它的值是(object[largest]
):
let obj = object => {
let largest;
for(const i in object) { // i represents the "key" of the objects, a,b,c,d
if(!largest || object[i] > object[largest]) {
largest = i;
}
}
return { [largest]: object[largest] };
}
console.log(obj({a:39,b:21,c:12,d:4}));
建议的解决方案:
使用Object.entries()
获取键|值对。用 Array.reduce()
迭代,选择具有最高值(索引 1)的对。 Destructure reduce 的结果(包含 [key, value]
的数组)转换为 key
和 value 常量,并使用它们构建返回对象。
const obj = (object) => {
const [key, value] = Object.entries(object)
.reduce((r, e) => e[1] > r[1] ? e : r);
return { [key]: value };
};
console.log(obj({a:39,b:21,c:12,d:4}));
关于javascript - 如何比较对象中的元素并返回较高的值? *Javascript*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49700475/