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

相关问题