2017-05-17 6 views
1

既存の配列をキーでスライスして新しい配列を作成する方法は?既存の配列でラベルを賢明に収集/作成するには?

例えば、私の入力は次のとおりです。

var array = [{"one":"1"},{"one":"01"},{"one":"001"},{"one":"0001"},{"one":"00001"}, 
{"two":"2"},{"two":"02"},{"two":"002"},{"two":"0002"},{"two":"00002"}, 
{"three":"3"},{"three":"03"},{"three":"003"},{"three":"0003"},{"three":"00003"}, 
{"four":"4"},{"four":"04"},{"four":"004"},{"four":"0004"},{"four":"00004"}, 
{"five":"5"},{"five":"05"},{"five":"005"},{"five":"0005"},{"five":"00005"} ]; 

私の出力は次のようになります。

var outPutArray = [ 
    {"one" : ["1","01","001","0001","00001"]}, 
    {"two":["2","02","002","0002","00002"]}, 
    {"three":["3","03","003","0003","00003"]}, 
    {"four":["4","04","004","0004","00004"]}, 
    {"five":["5","05","005","0005","00005"]} 
] 

javascriptでこれを達成するために、任意の短期かつ簡単な方法はありますか?

+0

これは、比較的簡単なループで行うことができます。少し努力してください。現時点では、これは私のための私のコードを書く要求です –

答えて

2

あなたは最初の配列を作成し、そのアレイに追加し、同じキーを持つオブジェクトが既に存在するかどうかを確認するためにthisArgのparamを使用するようにforEach()ループを使用することができます。

var array = [{"one":"1","abc":"xyz"},{"one":"01"},{"one":"001"},{"one":"0001"},{"one":"00001"},{"two":"2"},{"two":"02"},{"two":"002"},{"two":"0002"},{"two":"00002"},{"three":"3"},{"three":"03"},{"three":"003"},{"three":"0003"},{"three":"00003"},{"four":"4"},{"four":"04"},{"four":"004"},{"four":"0004"},{"four":"00004"},{"five":"5"},{"five":"05"},{"five":"005"},{"five":"0005"},{"five":"00005","abc":"xya"} ]; 
 

 
var result = []; 
 
array.forEach(function(e) { 
 
    var that = this; 
 

 
    Object.keys(e).forEach(function(key) { 
 
    if(!that[key]) that[key] = {[key]: []}, result.push(that[key]) 
 
    that[key][key].push(e[key]) 
 
    }) 
 
}, {}) 
 

 
console.log(result);

+0

これは機能しますが、追加すると追加のプロパティが失われます。ここでd0emo:https://jsfiddle.net/b8pwdrgr/ - 私は最初と最後の配列に 'abc'を追加しました – user2024080

+0

その場合の望ましい結果は何ですか? –

+0

2つのプロパティを持つ 'new label'で新しい配列を作成する必要があります。基本的に 'key'は動的です動的配列を作成します – user2024080

1
var outputArray=[array.reduce((obj,el)=>(Object.keys(el).forEach(key=>(obj[key]=obj[key]||[]).push(el[key])),obj),{})]; 

各アレイオブジェクトオブジェクトのキーを値を含む配列としてオブジェクトに入れて、オブジェクトへの配列を減らします。

http://jsbin.com/leluyaseso/edit?console

+0

理解できません、それは純粋なjavascriptですか? – user2024080

+0

@ user2024080 yep ES6 ... –

関連する問題