2017-08-30 61 views
0

摆脱对象值我有一个名为data这样的对象:JS - 如何通过关键

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(按标题获取)。

+1

_ “价值像JSON数据” _ - 这是一个_object_。 ;) – evolutionxbox

+0

检查这个问题的答案:[按属性名称递归搜索对象中的值](https://stackoverflow.com/questions/40603913/search-recursively-for-value-in-object-by-property-名称) –

+0

当您将密钥传递给函数时,“通过标题获取”是什么意思。 – muaaz

回答

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

+0

非常感谢:D –

+0

我可以得到反向结果吗?例如:'Output 1' =>'output_1'('Output 1' is unique) –

+0

你的意思是,你想按价值搜索?只需反向检查'object [k] === value'并返回键而不是值。 –

1

一个简单的解决办法是:

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