0

我有一个包含近 300 个值的数组(取自 API),但我需要someAction()使用 10 个值的集合进行调用。我的意思是,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(){...});

谢谢你的帮助

4

3 回答 3

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(","));
}
于 2013-01-30T19:37:17.170 回答
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(){...});
}

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

于 2013-01-30T19:39:42.053 回答
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(){...});
}
于 2013-01-30T19:39:49.713 回答