如何通过搜索“值” /键来获得“名称”?

时间:2019-02-04 13:51:53

标签: javascript object

在搜索“值” 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>

6 个答案:

答案 0 :(得分:1)

使用Object#valuesArray#finddestructuring

如果要查找的值不存在,

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;
    }, []);
}

在使用中:
Object.values()Array.find()Array.reduce()