0

我需要制作一组属性

说:var array = ['dog', 'cat', 'lion', 'tiger', 'bear', 'human', 'snake'];

并创建一个功能,将其分为所需的多个组。

例如,输入将是function arrayGrouper(array, 3)

并且输出将是一个名为group 1and的字符串dog, cat, lion

group 2 tiger, bear

group 3 human, snake

如果我这样做了

function arrayGrouper(array, 2)

它会回来

  group 1   dog, cat, lion, tiger
  group 2   bear, human, snake

到目前为止,我有一个可以在这个函数中工作的 for 循环,但我已经知道它不会按我想要的方式工作:

  var team1 = [];
   var team2 = [];
   var team3 = [];



    for(var i = 0; i < array.length; i++)
    {
       if([i] <= Math.floor((array.length)/3))
        team1.push(array[i]);
    if ([i] > Math.floor(((array.length)/3)) && [i] <= (array.length - 3))
      team2.push(array[i]);
    if([i] > (array.length - 3))
    team3.push(array[i]);

   }
   print(team1);
   print(team2); 
   print(team3);

另外,我不想在函数中使用slice或。splice

4

5 回答 5

0

给你http://jsfiddle.net/c3DsK/1/

var array = ['dog', 'cat', 'lion', 'tiger', 'bear', 'human', 'snake'];   

function arrayGrouper ( array, n ) {
    var len = array.length;
    var groupBy = Math.floor(len/n);
    var firstLen = (len - (groupBy * n)) + groupBy;
    var ptr = 0;

    var strings = new Array();

    for ( var j = 0; j < n; j++ ) {
        var string = "";
        var loop = groupBy;
        if (j == 0) {
            loop = firstLen;
        }
        for ( var i = 0; i < loop; i++ ) {
            string += " " + array[ptr];
            ptr++;
        }
        strings['group' + (j+1)] = string;
    }
    return strings;
}

console.log(arrayGrouper(array,2));
console.log(arrayGrouper(array,3));

和输出

[group1: " dog cat lion tiger", group2: " bear human snake"]
[group1: " dog cat lion", group2: " tiger bear", group3: " human snake"]

注意:您可以像这样访问/保存组

var group = arrayGrouper(array,2);
var group1 = group['group1'];
var group2 = group['group2'];
于 2013-11-13T15:34:58.170 回答
0

这将返回您的组数组。(你可以在这里测试它http://jsfiddle.net/qCRAC/1

function arrayGrouper(array, n)
{
    var maxlen=array.length/n;
    var result=new Array();
    for(var i=0;i<n;i++) result[i]='';
    for(var i=0;i<array.length;i++)
        result[Math.floor(i/maxlen)]+=array[i].toString()+', ';
    for(var i=0;i<n;i++) result[i]=result[i].substring(0, result[i].length - 2);
    return result;
}
于 2013-11-13T15:55:38.970 回答
0

此函数返回一个新数组,其中包含每个组的子数组:

function arrayGrouper(stack, slices) {
    var remainder = stack.length % slices,
        size = Math.ceil(stack.length / slices),
        result = [],
        i = 0,
        slice;
    while (result.length < slices) {
        result.push(slice = []);
        while (slice.length < size) {
            slice.push(stack[i++]);
        }
        if (result.length === remainder) size--;
    }
    return result;
}

用法 :

var groups = arrayGrouper(array, 2);
var team1 = groups[0]; // ["dog", "cat", "lion", "tiger"]
var team2 = groups[1]; // ["bear", "human", "snake"]

如果您想要字符串而不是数组,请使用joindoc

var groups = arrayGrouper(array, 2);
var team1 = groups[0].join(' '); // "dog cat lion tiger"
var team2 = groups[1].join(' '); // "bear human snake"

这是一个现场演示:http: //jsfiddle.net/wared/HS2yH/

于 2013-11-13T16:02:16.250 回答
0

这将做到:

function arrayGrouper(array, n) {
    var length, group = 0;
    var perGroup = Math.floor(array.length / n);
    var remain = array.length - (perGroup * n);
    var results = new Array(n);
    for (var i = 0; i < array.length; i++) {
        (results[group] || (results[group] = [])).push(array[i]);
        length = results[group].length;
        if (length >= perGroup) {
            group++;
            if (remain && length < perGroup + 1) {
                remain--;
                group--;
            }
        }
    }

    // print results
    for (var i = 0; i < results.length; i++) {
        var str = 'group ' + (i + 1) + ' ' + results[i].join(', ');
        console.log(str);
    }
}

jsfiddle 演示

于 2013-11-13T20:21:28.453 回答
-1
var main_array = ['cat', 'dog', 'apple', 'orange'];

function grouper(arr_arg, group_num){
  var arr_length  = arr_arg.length;
  var new_group   = [];
  var groups      = [];
  var group0      = ['cat', 'dog'];
  var group1      = ['apple', 'orange'];
  var group_length;
  var i;
  var j;

  groups[0]       = group0;
  groups[1]       = group1;  
  group_length = groups[group_num].length;

  for(i = 0; i < arr_length; i += 1){
    for(j = 0; j < group_length; j += 1){
      if(arr_arg[i] === groups[group_num][j]){
        new_group.push(arr_arg[i]);
      }
    }
  }  
  return new_group;
}

console.log('Group 0 is: ' + grouper(main_array, 0));
console.log('Group 1 is: ' + grouper(main_array, 1));

http://jsfiddle.net/XmQwb/

于 2013-11-13T15:31:27.967 回答