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]);
}
}