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

У меня также есть другой массив. Он был отсортирован по недвижимости «категории» от А до С.

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

Вы можете использовать place и category свойство в качестве ключа для порядка сортировки с объектом, который отражает желаемый заказ.

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

Смежные вопросы