我有以下jquery / javascript函数,该函数从json数据获取值并将其添加到变量中:
function get_class_classes(data) {
var terms = data.terms, // setup shortcut data path
classList = ''; // setup blank var to add string values to
for (child = 0; child < terms.day.length; child++) {
classList += terms.day[child].slug + ' ';
}
for (child = 0; child < terms.medium.length; child++) {
classList += terms.medium[child].slug + ' ';
}
for (child = 0; child < terms.term.length; child++) {
classList += terms.term[child].slug + ' ';
}
for (child = 0; child < terms.type.length; child++) {
classList += terms.type[child].slug + ' ';
}
return classList;
}
题:
我是否有一种更干净的方法来进行设置,即将所有这些
for
循环压缩为更简洁的内容?这是我尝试过的:
function get_class_classes(data) {
var terms = data.terms, // setup shortcut
termsArray = ['day', 'medium', 'term', 'type'],
classList = ''; // setup blank var
for ( i=0; i < termsArray.length; i++ ) {
var currentTerm = termsArray[i];
for (child = 0; child < terms.currentTerm.length; child++) { // loop through each day, add term slug to daylis
classList += terms.currentTerm[child].slug + ' ';
}
}
return classList;
}
这将返回错误:
Uncaught TypeError: Cannot read property 'length' of undefined
我也将
var terms = data.terms
移到了循环中,这允许该函数工作,但是classList
返回的充满了'undefined'而不是实际值。data
的样本data
是一个json对象,其格式如下,这些内容是我从控制台复制的:terms: Object
day: Array[2]
0: Object
ID: 197
name: "Thursday"
slug: "thursday"
1: Object
medium: Array[1]
0: Object
ID: 200
name: "Painting"
slug: "painting"
/* Continues for variable amount of objects. Same is true for `term` and and `type` */
如果您偶然回答并知道为什么我的方法不起作用,那么对将来的参考/思考过程进行解释非常有用。
谢谢!
最佳答案
将terms.currentTerm.length
的访问权限更改为terms[currentTerm].length
。那应该解决您的错误。
说明
例如,在第一个for
循环的第一次迭代中,terms.currentTerm
不访问terms.day
。而是访问currentTerm
对象上名为terms
的属性。该属性不存在-terms
没有名为currentTerm
的属性-并且尝试在不存在的对象上访问length
会产生错误。
如果要使用与terms
变量的值相同的名称访问currentTerm
上的属性,请使用方括号表示法,以便改为使用currentTerm
的值:terms[currentTerm]
。解释器将其读取为terms['day']
,这是您真正想要的。
关于javascript - 如何在JavaScript中压缩for循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27536190/