在阵列中重复操作foreach 10

时间:2013-01-30 19:30:43

标签: javascript arrays loops multidimensional-array

我有一个数组(从API获取)有近300个值,但我需要用10个值的集合调用someAction()。我的意思是,1-10,11-20,21-30 ......等等。我把它限制在10,但其他290个值都丢失了。 它是一个多维数组。

var n = 10; // Limit of names
for (var i = 0; i < n; i++) {
    namestr += names[i].first + "(" + names[i].nick + ")";
    if(i != (n-1)){namestr += ", ";}
}
someAction(namest, function(){...});

感谢您的帮助

3 个答案:

答案 0 :(得分:7)

如果你只想在每10个元素上调用someAction,你可以这样做:

for (var i = 0; i < names.length; i+=10) {
    someAction(names.slice(i, i+10));
}

根据您的评论,您可以这样做:

for (var i = 0; i < names.length; i+=10) {
    var tmp = names.slice(i, i+10);
    for (var j = 0; j < tmp.length, j++) {
        tmp[j] = tmp[j].first + " (" + tmp[j].nick + ")";
    }
    someAction(tmp.join(","));
}

答案 1 :(得分:1)

您可以使用Array.slice从大型数组中剪切10个元素块并使用它调用您的函数:

for (var i = 0; i < names.length; i += 10) {

   var elements = names.slice(i, i+10);
   // handle this set 
   handleTenItems(elements);
}

或者,如果您只需要处理10组中的元素:

for (var base = 0; base < names.length; base += 10) {

  for (var i = 0; i < n; i++) {
    namestr += names[base + i].first + "(" + names[base + i].nick + ")";
    if(i != (n-1)){namestr += ", ";}
  }
  someAction(namest, function(){...});
}

旁注:我在这里看不到多维数组......

答案 2 :(得分:0)

您可以向字符串中添加项目,并为每10个项目调用该方法,然后使用剩余部分调用它:

for (var i = 0, namestr = ''; i < names.length; i++) {
  namestr += (namestr.length ? ", " : "") + names[i].first + "(" + names[i].nick + ")";
  if (i % 10 == 9) {
    someAction(namestr, function(){...});
    namestr = '';
  }
}
if (namestr.length) {
  someAction(namestr, function(){...});
}