将数组排序到具有键和值对的对象中,并将相同的值推送到相同的键/值中

时间:2016-06-22 14:31:13

标签: javascript lodash

我想用键值对对数组进行排序和对象。

所以,如果我有一个这样的数组[1,2,3,2,4,1,5,1,6],它应该吐出这样的东西。我试图使用lodash!

{
  1: [1, 1, 1],
  2: [2, 2],
  3: [3],
  4: [4],
  5: [5],
  6: [6]
}

6 个答案:

答案 0 :(得分:1)

您可以使用reduce()并返回对象。

var ar = [1, 2, 3, 2, 4, 1, 5, 1, 6];
var result = ar.reduce(function(o, e) {
  o[e] = (o[e] || []).concat(e);
  return o;
}, {});

console.log(result)

答案 1 :(得分:1)

一些基本的迭代会做到这一点,你可以设置一个数组,或推送到现有的数组

var arr = [1,2,3,2,4,1,5,1,6];
var obj = {};

arr.forEach( (x) => x in obj ? obj[x].push(x) : obj[x] = [x]);

document.body.innerHTML = '<pre>'+ JSON.stringify(obj, 0, 4) +'</pre>'

答案 2 :(得分:0)

这是一个非常简单的纯JavaScript版本(https://jsfiddle.net/azkuodyc/

var array = [1,2,3,2,4,1,5,1,6];
var newArrayObject = {};

for (key in array) {
    var value = array[key];
    if (typeof newArrayObject[key] == 'undefined') {
        newArrayObject[key] = [];
    }
    newArrayObject[key].push(value);
}

答案 3 :(得分:0)

&#13;
&#13;
CHOICE /M Do you want to copy files? [Y/N] 
IF errorlevel 2 goto nagative
IF errorlevel 1 goto makecopy
&#13;
&#13;
&#13;

答案 4 :(得分:0)

另一种方法是这样做;

&#13;
&#13;
var arr = [1,2,3,2,4,1,5,1,6],
    obj = arr.reduce((p,c) => (p[c] = p[c] ? p[c].concat(c) : [c],p),{});
console.log(obj);
&#13;
&#13;
&#13;

答案 5 :(得分:0)

var arr =  [1,2,3,2,4,1,5,1,6];

var res = _(arr).countBy().mapValues((value, key) => {
  return _.times(value, _.constant(parseInt(key)));
}).value();

console.log(res);

https://jsfiddle.net/7bppaxx5/