在搜索“值” 174时,我无法从“标签”中获取字符串“ ola”。
在一个类似的问题中,我找到了一段与我的代码相似的代码:How to get a key in a JavaScript object by its value?。我试过了,但是返回未定义。从那时起,我一直在更改它以尝试返回某些内容。现在,它返回一个布尔值(false)。
a = {
list: {0: {label: 'ola', value: 174}}
};
value = 174;
console.log([Object.values(a.list).includes(value)]);
我想通过搜索字符串“ ola”来返回它的“值”,在这种情况下为174。并且我想保持对象“ a”的结构不变。 / p>
答案 0 :(得分:1)
使用Object#values和Array#find和destructuring。
如果要查找的值不存在, Array#find将返回undefined
。在访问找到的内容的label属性之前,使用||
运算符处理该特定情况。
const a = {
list: {0: {label: 'ola', value: 174}}
};
const value = 174;
function find(v){
return (Object.values(a.list).find(({value})=>value===v)||{}).label;
}
const res = find(value);
console.log(res);
答案 1 :(得分:1)
之前曾经说过,但是list不是Array
,也许这样可以帮助您实现想要的目标?
const a = {
list: {
0: {
label: 'ola',
value: 174
}
}
};
const value = 174;
function find(obj, val) {
let res = null;
Object.keys(a.list).forEach((k) => {
if (a.list[k].value === val) {
res = a.list[k].label;
}
});
return res;
}
console.log(find(a, value));
答案 2 :(得分:0)
a.list
是一个对象,请使用for
in
遍历其值。
a = {
list: {0: {label: 'ola', value: 174}}
};
value = 174;
for (const key in a.list) {
if (a.list.hasOwnProperty(key)) {
const element = a.list[key];
console.log(element.value === value)
}
}
答案 3 :(得分:0)
您需要在列表中找到密钥。
var a = {
list : {
0 : {
label: 'ola',
value: 174
}
}
},
value = 174;
console.log(findKey(a.list, value, 'label', 'value'));
function findKey(obj, value, labelField, valueField) {
var foundKey = Object.keys(obj).find(x => obj[x][valueField] === value);
return foundKey != null ? obj[foundKey][labelField] : null;
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
答案 4 :(得分:0)
Array.prototype.includes()不适用于对象。如果可能的话,我会翻转键和值,搜索键比值更有意义,因为您不能在对象中复制键。
但是,从代码片段看来,您希望“列表”是一个数组而不是一个对象。
这是正确的json:
if (mySuperBoolean = Boolean.TRUE)
答案 5 :(得分:0)
第一个函数返回标签的字符串。
第二个函数返回具有所有匹配标签的数组。
function findLabelByValue(value){ // Returns first matching label found
return Object.values(a.list).find(element => element.value == value).label;
}
function findLabelsByValue(value){ // Returns all matching labels as array
return Object.values(a.list).reduce(function(list, element){
if(element.value == value)
return list.push(element.label);
return list;
}, []);
}