【问题标题】:JS - How to get value from object by key [duplicate]JS - 如何通过键从对象中获取值[重复]
【发布时间】:2017-08-30 08:24:10
【问题描述】:

我有一个名为 data 的对象,如下所示:

var data = {
  operators: {
    operator1: {
      top: 20,
      left: 20,
      properties: {
        title: 'Operator 1',
        inputs: {},
        outputs: {
          output_1: {
            label: 'Output 1',
          },
          output_2: {
            label: 'Output 2',
          }
        }
      }
    },
    operator2: {
      top: 80,
      left: 300,
      properties: {
        title: 'Operator 2',
        inputs: {
          input_1: {
            label: 'Input 1',
          },
          input_2: {
            label: 'Input 2',
          },
          input_3: {
            label: 'Input 3',
          },
        },
        outputs: {}
      }
    },
  },
};

如何通过键从data获取值。

function myFunction(data, key) {
  //Find in data with key, and return value.
}

结果:var result = myFunction(data,'output_1') = Output 1(按标题获取)。

【问题讨论】:

标签: javascript


【解决方案1】:

您可以使用迭代和递归的方法并在找到时提前退出。

函数getValue如果找到则返回一个对象,否则返回false。

要获取值,您可以获取属性value

function getValue(object, key) {
    var result;
    return Object.keys(object).some(function (k) {
        if (k === key) {
            result = { value: object[k] };
            return true;
        }
        if (object[k] && typeof object[k] === 'object' && (result = getValue(object[k], key))) {
            return true;
        }
    }) && result;    
}

var data = { operators: { operator1: { top: 20, left: 20, properties: { title: 'Operator 1', inputs: {}, outputs: { output_1: { label: 'Output 1' }, output_2: { label: 'Output 2' } } } }, operator2: { top: 80, left: 300, properties: { title: 'Operator 2', inputs: { input_1: { label: 'Input 1' }, input_2: { label: 'Input 2' }, input_3: { label: 'Input 3', foo: null } }, outputs: {} } } } };

console.log(getValue(data, 'output_1').value); // { label: 'Output 1' }
console.log(getValue(data, 'foo').value);      // null
console.log(getValue(data, 'bar'));            // false
console.log(getValue(data, 'bar').value);      // undefined

【讨论】:

  • 我可以得到反转结果吗?例如:Output 1 => output_1Output 1 是唯一的)
  • 你的意思是,你想按值搜索?只需反向检查object[k] === value 并返回键而不是值。
  • 没错!! :D
【解决方案2】:

一个简单的解决方案可能是:

function myFunction(data,key){
  if(data[key]){
    return data[key];
  }else{
    return myFunction(data[key],key);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2016-06-07
    • 2021-08-08
    • 1970-01-01
    • 2019-04-11
    • 2017-10-27
    • 2016-10-05
    • 1970-01-01
    相关资源
    最近更新 更多