我不确定该怎么称呼这个问题,但这是我想做的事情:
我目前正在为chartjs
创建一系列生成器,以帮助我创建数据集。
现在我想这样做的方法是简单地使用object keys
从我的数组中的每个元素中提取数据。
数组的每个元素都可能如下所示:
如您所见,此对象包含其中的其他对象。
这会产生问题,因为我想要对象feedback_skill
的名称,我必须执行以下操作:
data.forEach(function (x) {
x['feedback_skill']['name']
});
不能容纳一个变量。
现在我可以做的是传递以下数组:serieKey = ['feedback','name']
建议数组中的第一个元素是第一个键,下一个元素是我想要命中的变量。
然而,这些数据集可以有无限数量的层,所以我的问题是:
有这样做的聪明方法吗?
答案 0 :(得分:1)
我不知道本地JavaScript方法这样做,但是各种JavaScript框架允许您从这样的对象访问深层属性。例如,Dojo有lang.getObject,我可以看到有JQuery plugin做类似的事情,lodash as well。如果你没有使用这些框架,那么你总是可以创建自己的util函数来执行类似的工作。
这些类型的效用函数允许您将目标作为“点符号”属性传递,因此您可以调用:
lang.getObject("feedback_skill.name", false, x)
以Dojo为例,但它们非常多。
答案 1 :(得分:0)
我认为您的方法没有任何问题,可以通过以下方式处理无限数量的图层:
data.forEach(function(x){
for(i in seriesKey)
x = x[seriesKey[i]]; // x will contain whatever you wanted to retrieve when the loop ends
doSomething(x);
}
seriesKey可以是一个类似于示例中的数组,只需要遍历所需深度的元素。