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