2016-06-22 25 views
1

配列をソートし、キー値のペアでオブジェクトをソートしたいと思います。同じ値を同じキー/値に持つキーと値のペアを持つオブジェクトに配列を並べ替えます。

私はこの[1,2,3,2,4,1,5,1,6]のような配列を持っていれば、このようなものを吐き出すはずです。私はそれのためにロダッシュを使用しようとしていた!

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

答えて

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

いくつかの基本的な反復は、あなたがいずれかの配列を設定したり、既存のアレイここ

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>'

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); 
} 
+0

この宣言には割り当て 'VAR newArrayObject [キー] .push(値)私はそれを修正' – Redu

+0

@Redu申し訳ありません:HTTPSは: //jsfiddle.net/azkuodyc/ –

0

const arr = [1,2,3,2,4,1,5,1,6]; 
 
const r = {}; 
 

 
arr.forEach(e=>r[e]?r[e].push(e):r[e]=[e]); 
 

 
console.log(r);

0

これが行う一つの他の方法。

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);

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/

関連する問題