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

나는 또한 다른 배열을 가지고있다. 속성 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"속성은 두 경우 모두 같습니다. 값이 다릅니다. 두 번째 배열을 다시 정렬하여 첫 번째 배열과 같은 배열을 만들 수 있습니까?

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

관련 문제