Javascript - 分组相同的数字数组

时间:2017-08-26 21:13:39

标签: javascript

我必须将类似的数字分组到一个数组中。 例如:

var original_Array=[1,1,2,3,3];

这是我原来的数组。但我必须将此数组拆分为

Array_1 = [ 1, 1 ];
Array_2 = [ 2 ];
Array_3 = [ 3, 3 ];

如何从java脚本中拆分原始数组。

请查看实际情况:

handleAutoSplit(e) {
    e.preventDefault();
    var item = this.state.item;
    var lines = item.order_items;
    var lines=item.order_items.splice(0);

    for (var j = 0; j < lines.length; j++) {
        for ( var k=j+1; k < lines.length; k++) {
            if (lines[j].split_number == lines[k].split_number) {
                var count=0;
                var line = { 
                    line_id: uuidv4(), 
                    split_number:lines[count].split_number, 
                    product_quantity:lines[count].product_quantity 
                };
                item.order_items.push(line);
                count++
            }
            this.setState({ item: item })
        }
    }       
    this.props.create(this.state.item);
    item.order_items.splice(0);
}

1 个答案:

答案 0 :(得分:1)

您可以使用Map执行此操作:这样,当您的数组未排序时,它也会起作用。使用reduce构建它,然后使用Map#values方法从中获取值:

&#13;
&#13;
var a = [1,1,2,3,3];

var res = [...a.reduce ( (acc, v) => acc.set(v, (acc.get(v) || []).concat(v)), 
                        new Map).values()];
  
console.log(res);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

对于那些喜欢非ES6,非功能性代码的人:

&#13;
&#13;
var a = [1,1,2,3,3],
    acc = {},
    res = [],
    i, v;

for (i = 0; i < a.length; i++) {
    v = a[i];
    if (!(v in acc)) {
        acc[v] = [];
    }
    acc[v].push(v);
}
for (v in acc) {
    res.push(acc[v]);
}
  
console.log(res);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;