我有以下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/

10-12 17:30