2017-08-30 89 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); 
    } 
}