我有一个obj你看到吼叫:
try-with-resource
我希望得到像贝娄这样的价值:
var obj = {
a: {
b:{
c:"c"
}
}
}
深入,我想在一个函数中封装需求:
var t = ["a", "b", "c"] // give a key list
console.log(obj["a"]["b"]["c"]) // and get value like this.
因为function get_value(obj, key_list) {
}
不确定,所以如何实现这个功能呢?
答案 0 :(得分:3)
只需使用while
循环并迭代键
var obj = {
a: {
b:{
c:"c"
}
}
}
var t = ["a", "b", "c"];
function get_value(obj, key_list) {
let currentReference = obj;
while (key_list.length !== 0) {
currentReference = currentReference[key_list[0]];
key_list = key_list.slice(1);
}
return currentReference;
}
console.log(get_value(obj, t));

reduce
虽然更优雅:
var obj = {
a: {
b:{
c:"c"
}
}
}
var t = ["a", "b", "c"];
function get_value(obj, key_list) {
return key_list.reduce((currentReference, key) => currentReference[key], obj);
}
console.log(get_value(obj, t));

答案 1 :(得分:2)
递归解决方案:
function get_value(obj, key_list, i) {
if (i == undefined) {
i = 0;
}
if (i < key_list.length - 1) {
return get_value(obj[key_list[i]], key_list, i+1)
}
return obj[key_list[i]]
}