2016-12-02 13 views
0

D3.jsで私の視覚化では、私は最初の配列を持っています。値は最小値から最大値までソートされています。配列を別の配列に従って並べ替えるにはどうすればよいですか?

var firstDataset = [ 
    {place: "fifth", category: "A", value: 100}, 
    {place: "sixth", category: "C", value: 200}, 
    {place: "fourth", category: "B", value: 300}, 
    {place: "third", category: "B", value: 400}, 
    {place: "first", category: "A", value: 500}, 
    {place: "second", category: "C", value: 600} 
]; 

私は別の配列も持っています。プロパティ "カテゴリ"によってAからCにソートされています。

var secondDataset = [ 
    {place: "first", category: "A", value: 1500}, 
    {place: "fifth", category: "A", value: 6500}, 
    {place: "third", category: "B", value: 3500}, 
    {place: "fourth", category: "B", value: 5500}, 
    {place: "second", category: "C", value: 2500}, 
    {place: "sixth", category: "C", value: 4500} 
]; 

プロパティ "place"と "category"はどちらの場合も同じです。値は異なります。どのようにして、最初の配列のように2番目の配列を並べ替えることができますか?

+0

だから、最初の配列のように 'place'プロパティでソートしたいですか? – hindmost

答えて

4

オブジェクトのソート順のキーにplacecategoryプロパティを使用して、希望の順序を反映させることができます。

var firstDataset = [{ place: "fifth", category: "A", value: 100 }, { place: "sixth", category: "C", value: 200 }, { place: "fourth", category: "B", value: 300 }, { place: "third", category: "B", value: 400 }, { place: "first", category: "A", value: 500 }, { place: "second", category: "C", value: 600 }], 
 
    secondDataset = [{ place: "first", category: "A", value: 1500 }, { place: "fifth", category: "A", value: 6500 }, { place: "third", category: "B", value: 3500 }, { place: "fourth", category: "B", value: 5500 }, { place: "second", category: "C", value: 2500 }, { place: "sixth", category: "C", value: 4500 }], 
 
    getKey = function (o) { return o.place + '|' + o.category; }, 
 
    order = Object.create(null); 
 

 
firstDataset.forEach(function (o, i) { 
 
    order[getKey(o)] = i; 
 
}); 
 

 
secondDataset.sort(function (a, b) { 
 
    return order[getKey(a)] - order[getKey(b)]; 
 
}); 
 

 
console.log(secondDataset);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題