Javascript 在两个级别中使用变量作为键

Javascript 在两个级别中使用变量作为键,javascript,Javascript,我想制作一个通用函数,在这个函数中,我可以从带有对象的数组中打印选定的属性 例如: var contacts = [ { name: 'John', address:{ country:'Germany', city:'Berlin' } }, { name: 'Joe', address:{ country:'Spain', city:'Madr

我想制作一个通用函数,在这个函数中,我可以从带有对象的数组中打印选定的属性

例如:

var contacts = [
    {
      name: 'John',
      address:{
        country:'Germany',
        city:'Berlin'
      }
    },
    {
      name: 'Joe',
      address:{
        country:'Spain',
        city:'Madrid'
      }
    }
]
这是我的职责:

function print(array, key, index){
  console.log(array[index][key]);
}
因此,如果我想要名称,例如:

print(contacts, 'name', 0)
我听到“约翰”

但是如果我想要城市,我该怎么办

这是未定义的:

print(contacts, 'address.city', 0)

有什么想法吗?

函数打印(数组、键、索引){
function print(array, key, index){
  var parts = key.split(".");
  var returnValue = array[index];
  for(var i=0;i<parts.length;i++) {
    returnValue = returnValue[parts[i]];
  }
  console.log(returnValue);
}
var parts=键拆分(“.”); var returnValue=数组[索引];
对于(var i=0;i目前我能想到的最好的事情:


也许其他人有更好的想法。

我的解决方案非常幼稚,我没有在边缘案例中考虑过它,但我是函数编程的粉丝,所以这很快就实现了(不考虑不变性)


不要认为你可以这样做。看看@putvande,昨天还有一个dup,用
.reduce()
数组函数的出色的简短用法得到了回答。@Pointy那是我写的:p@thefourtheye啊好的-太棒了:)当然,如果密钥不存在,你必须捕捉错误
function print(array, key, index) {
  var splitted_key, new_key;

  if (key.indexOf(".") !== -1) { 
    splitted_key = key.split(".");
    new_index = splitted_key.shift();
    new_key = splitted_key.join(".");
    print(array[index], new_key, new_index);
  }
  else {
    console.log(array[index][key]);
  }
}