【发布时间】:2021-06-29 00:51:18
【问题描述】:
我对此有一个解决方案,但我不确定这是否是最好的方法.. 我有一个看起来像这样的对象:
const obj = {
thingA: 1,
thingB: 2,
thingC: 1,
thingD: 1,
thingE: 4
}
我想获取所有具有最低值的键值对,然后能够随机选择具有最低值的键值对之一(在这种情况下,从三个具有最低值的键中随机选择一个1 作为值)。
这就是我所拥有的,并且可行,但我想知道是否有更好/更有效的方法:
const keyArray = Object.keys(obj)
const minArray = (keyArray) => {
const min = keyArray.reduce((prev, curr) => obj[curr] ? prev : curr);
const res = [];
for (const key of keyArray) {
if (obj[key] !== obj[min]) {
continue
}
res.push(key)
}
return res
}
const randomMinKey = minArray(keyArray)[Math.floor(Math.random()*minArray.length)]
【问题讨论】:
-
const min = Math.min(...Object.values(obj)); const minPairs = Object.entries(obj).filter(([, v]) => v === min); const randomMinKey = minPairs[Math.floor(Math.random()*minPairs.length)];顺便说一句,我不完全确定在这种情况下“高效”是什么意思,但我假设“代码更少,可能更容易阅读” -
哈哈。有趣的是,你如何试图隐藏这个算法的真正目的。
标签: javascript arrays object filtering key-value