【发布时间】:2021-01-17 13:02:07
【问题描述】:
我有一个对象
const alpha = {
a: 'apple'
b: 'bubble'
}
目标是只使用值来获取属性名,比如我想用字符串apple来获取字符串形式的proberty名a。
【问题讨论】:
标签: javascript object
我有一个对象
const alpha = {
a: 'apple'
b: 'bubble'
}
目标是只使用值来获取属性名,比如我想用字符串apple来获取字符串形式的proberty名a。
【问题讨论】:
标签: javascript object
以下简单实现将在控制台中记录apple 的密钥。
const alpha = {
a: 'apple',
b: 'bubble'
}
Object.entries(alpha).map(
([key, value]) => {
if (value === 'apple'){
console.log(key);
}
}
)
【讨论】:
我认为你想做这样的事情......
const alpha = {
a: 'apple',
b: 'bubble'
};
const selectKeys = (object, selector) => {
let results = [];
if (object != null) {
results = Object.entries(object)
.filter((e) => selector(e[1], e[0], e))
.map((e) => e[0]);
}
return results;
};
const keys = selectKeys(alpha, (value) => value === 'apple');
console.log(keys);
这只会选择选择器表达式返回 true 的所有键。对于您的情况,这只是名称。请注意,这会返回一个数组,因为可以返回多个键。要获得第一个密钥,只需使用keys[0] 或其他任何内容。
您可以变得更花哨并添加更高阶的函数,以使您的选择器也更易于阅读。
const byValue = (value) => (v) => v === value;
const a = selectKeys(object, byValue('apple'));
const a = selectKeys(object, byValue('bubble'));
【讨论】:
您将返回值与提供的值匹配的键列表。如果您想要第一个匹配项,只需将值从结果的开头移开即可。
const alpha = {
a: 'apple',
b: 'bubble'
};
const keysForValue = (obj, value) =>
Object.entries(obj)
.filter(([, val]) => val === value)
.map(([key]) => key);
console.log('Key:', keysForValue(alpha, 'bubble').shift()); // Key: b
.as-console-wrapper { top: 0; max-height: 100% !important; }
【讨论】:
试试下面的方法,
const alpha = {
a: 'apple',
b: 'bubble',
c: 'bubble',
d: 'orange',
e: 'bubble'
}
const findKeyByValue = (obj, value) => {
const arr = [];
for (const prop in obj) {
if(obj[prop] === value){
arr.push(prop);
}
}
return arr;
};
findKeyByValue(alpha, 'bubble'); //[ 'b', 'c', 'e' ]
【讨论】: