使用join()批量处理数组?

时间:2013-08-30 20:13:53

标签: javascript

   var j = 0;
   var batchSize = 100;
   var json_left_to_process = json.length;
   while (json_left_to_process != 0) {
       var url_param = "";
       for (var i = j; i < j+batchSize; i++) {
           url_param += json[i].username + ",";
           json_left_to_process--;
       }
       j += batchSize;
       if (json_left_to_process < 100) {
           batchSize = json_left_to_process;
       }
       url_param.substring(0, url_param.lastIndexOf(','));

      //make ajax request
           $.ajax({
                type: "POST",
                url: "/api/1.0/getFollowers.php",
                data: {param: url_param}
           )};
  }

我不想使用

url_param += json[i].username + ",";

相反,我想说

newArray.push(json[i].username) 

然后

url_param = newArray.join(',');

但我也希望一次处理数组中最多 100个元素。我怎么能这样做?

编辑:对不起,我意味着最多100个元素,然后是另外100个元素,然后是另外100个元素等等,直到你处理完所有内容。

2 个答案:

答案 0 :(得分:3)

如果您的意思是加入 100 ,然后再加入 100 ,那么您可以这样做。

 newArray.slice(0, 100).join(',');

之后

 newArray.slice(100, 200).join(',');

您可以创建一个这样的函数来自动化它。

var array = [1...1000], // The array
    start = 0,          // The index to start at
    step  = 100;        // How many to get at a time

var getBatch = function() {
    var result = array.slice(start, start + step).join(',');
    start += step;  // Increment start
    return result;
};

getBatch(); // === 1, 2, 3, 4, ... 100
getBatch(); // === 100, 101, 102, ... 200
  

文档:https://developer.mozilla.org

答案 1 :(得分:1)

我会使用模数。

var i, start = 0;
var newArray = [];
for (i = 0; i <= json.length; i++) {

   // push whatever you want to newArray

   // if i is dividable by 100 slice that part out and join it
   if (i % 100 === 0) {
      console.log(newArray.slice(start, i).join(','));
      start = i;
   }
}