我正在尝试访问数组中对象内的对象的属性。口感相当。问题是,我想使用变量来做到这一点。如果我用代码解释它可能更容易;
var array= [
{ id: 0, client: { id:0, clientName: "John" }},
{ id: 1, client: { id:1, clientName: "Tom" }}
]
console.log(array[0][client][clientName]); // Displays correctly
因此上面的代码使用括号表示法按预期工作。但正如我之前所说,我需要像这个例子一样使用变量;
var array= [
{ id: 0, client: { id:0, clientName: "John" }},
{ id: 0, client: { id:0, clientName: "John" }}
]
var property = "client.clientName";
console.log(array[0][property]); // Does not work
我理解为什么这段代码不起作用,但实际上这更像是一个伪代码来解释我想要实现的目标!
答案 0 :(得分:1)
var array= [
{ id: 0, client: { id:0, clientName: "John" }},
{ id: 0, client: { id:0, clientName: "John" }}
]
var property = "client.clientName",
getPropByString=function(data,val){
val=val.split(/\./g);
var dataApp=data;
val.forEach(function(prop){
dataApp=dataApp[prop];
});
return dataApp;
};
console.log(getPropByString(array[0],property));
答案 1 :(得分:1)
你不能像那样得到它而是拆分并获得嵌套属性。使用Array#reduce
方法通过使用String#split
方法拆分属性字符串来获取嵌套属性。
// split the string and iterate over the result array
property.split('.').reduce(function(o, p) {
// check object defined and return nested property value
return o && o[p];
// set initial value as the object where you need to fetch data
}, array[0])
var array = [{
id: 0,
client: {
id: 0,
clientName: "John"
}
}, {
id: 0,
client: {
id: 0,
clientName: "John"
}
}]
var property = "client.clientName";
console.log(
property.split('.').reduce(function(o, p) {
return o && o[p];
}, array[0])
);

答案 2 :(得分:0)
您可以使用一个函数,该函数将字符串与属性名称分开并减少给定对象。
function getValue(object, path) {
return path.split('.').reduce(function (o, k) {
return (o || {})[k];
}, object);
}
var array = [{ id: 0, client: { id:0, clientName: "John" } }, { id: 1, client: { id:1, clientName: "Tom" } }],
property = "client.clientName";
console.log(getValue(array[0], property));