var arr = { foo : 1, bar: { baz : 2 }, bee : 3 }

function getter(variable) {
  return arr[variable];
}


如果我想要'foo'vs'bee'我可以做arr[variable]-这很简单,而函数可以做到这一点。

但是,如果我想获得arr.bar.baz又名arr[bar][baz]怎么办?

我可以将什么传递给getter函数,它可以让我做到这一点(当然,还可以让我使用同一函数获得非嵌套的属性)。

我尝试了getter('bar.baz')getter('[bar][baz]'),但是这些都不起作用。

我想我可以解析点或方括号(例如:In javascript, test for property deeply nested in object graph?)。有没有更清洁的方法? (当然,除了评估)。

特别是因为我需要在一堆数组元素的循环中多次进行正确的深度设置。

最佳答案

如何将getter函数签名更改为getter('bar', 'baz')

function getter() {
  var v = arr;
  for(var i=0; i< arguments.length; i++) {
    if(!v) return null;
    v = v[arguments[i]];
  }
  return v;
}


ps。没有测试,但你明白了;)

08-25 12:35
查看更多