JS - 如何通过键从对象获取值

时间:2017-08-30 08:24:10

标签: javascript

我有一个名为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(按标题获取)。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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