gpt4 book ai didi

javascript - 通过值查找条目键的最佳方法

转载 作者:行者123 更新时间:2023-12-02 03:01:28 27 4
gpt4 key购买 nike

我有这个对象:

const cOPE= { ADD:   43
, SUB: 8722
, MUL: 261
, DIV: 247
, EQU: 61
, Point: 46
, Clear: 99
}

我目前使用:

const kOPE = k => Object.entries(cOPE).find(o=>o[1]==k)[0]

根据值检索键值。示例:

 console.log( kOPE(261) ) // -> MUL

是否有更好的方法来编码 kOPE功能?
不是有一个简单的 JS 函数可以返回键的名称吗?

[+] 该代码是封闭对象的内部代码,不能存在其他值并且每个键都是唯一的。

最佳答案

如果您发现自己经常这样做,您可能需要考虑反转您的 map :

const invert =
obj =>
Object.fromEntries(
Object.entries(obj)
.map(([k, v]) => [v, k]));

const cOPE =
{ ADD: 43
, SUB: 8722
, MUL: 261
, DIV: 247
, EQU: 61
, Point: 46
, Clear: 99
};

const EPOc = invert(cOPE);

EPOc[261];
//=> MUL

性能

如果您确实担心性能,那么您绝对应该使用倒置 map 。

这是 invert 的柯里化(Currying)版本,它返回一个接受值并返回与其关联的键的函数。它绑定(bind)到从 obj 构建的反转对象。

使用 Rick Hitchcock 的相同测试函数:

const invert =
obj => ((o, v) => o[v])
.bind(null,
Object.fromEntries(
Object.entries(obj)
.map(([k, v]) => [v, k])));

const cOPE =
{ ADD: 43
, SUB: 8722
, MUL: 261
, DIV: 247
, EQU: 61
, Point: 46
, Clear: 99
};


test(invert(cOPE), 43);
test(invert(cOPE), 261);
test(invert(cOPE), 99);
<script>
// Credits to Rick Hitchcock for the test function
const test = (fnc, num) => {
let j;
console.time('speedTest')
for (let i = 0; i < 1000000; i++) { j = fnc(num) }
console.timeEnd('speedTest')
}
</script>

关于javascript - 通过值查找条目键的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869037/

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