2016-12-02 55 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} 
]; 

我也有另一個數組。它已被從屬性「分類」排序,以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} 
]; 

屬性「地方」和「類別」是在兩種情況下是相同的。值是不同的。我如何重新排列第二個數組以像第一個數組一樣獲取元素序列?

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

相關問題