2016-03-10 52 views
3

我有兩個數組中的值,可以說 priceArray = [1,5,3,7]排序2陣列與它們中的一個的在JavaScript

userIdArray = [11,52,41,5]

我需要對priceArray進行排序,這樣userIdArray也會被排序。 例如,輸出應爲:

priceArray = [1,3,5,7] userIdArray = [11,41,52,5]

任何想法如何做呢?

我寫我的服務器中的NodeJS

+0

爲什麼你有兩個數組?這可以通過具有ID和價格屬性的單個數組來完成嗎? – rrowland

+0

@rrowland,這是服務器現在所擁有的,我該如何提高? –

回答

3

Sorting with map取出並改編爲userIdArray:

// the array to be sorted 
 
var priceArray = [1, 5, 3, 7], 
 
    userIdArray = [11, 52, 41, 5]; 
 

 
// temporary array holds objects with position and sort-value 
 
var mapped = priceArray.map(function (el, i) { 
 
    return { index: i, value: el }; 
 
}); 
 

 
// sorting the mapped array containing the reduced values 
 
mapped.sort(function (a, b) { 
 
    return a.value - b.value; 
 
}); 
 

 
// container for the resulting order 
 
var resultPrice = mapped.map(function (el) { 
 
    return priceArray[el.index]; 
 
}); 
 
var resultUser = mapped.map(function (el) { 
 
    return userIdArray[el.index]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(resultPrice, 0, 4) + '</pre>'); 
 
document.write('<pre>' + JSON.stringify(resultUser, 0, 4) + '</pre>');

通過適當的數據結構,rrowland建議,您可以使用此:

var data = [{ 
 
     userId: 11, price: 1 
 
    }, { 
 
     userId: 52, price: 15 
 
    }, { 
 
     userId: 41, price: 13 
 
    }, { 
 
     userId: 5, price: 17 
 
    }]; 
 

 
data.sort(function (a, b) { 
 
    return a.price - b.price; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');

+0

第一種方法會發生四種不同的迭代! –

+0

@RajaprabhuAravindasamy的確如此。那來自MDN。 –

0

很難開一個更好的解決方案,而無需知道整個的用例。這就是說,如果你需要通過ID這些排序可能更有意義,創建一個包含用戶對象的單個陣列:

var users = [ 
    { id: 123, price: 25.00 }, 
    { id: 124, price: 50.00 } 
]; 

users.sort(function(a, b) { 
    return a.id - b.id; 
}); 

或者,如果他們不需要進行排序,則可以簡單地創建一個用戶通過地圖ID:

var userPrices = { 
    123: 25.00, 
    124: 50.00 
}; 
0

大廈Rrowland的回答,您可以像lodash庫創建對象的數組:

var prices = [1, 5, 8, 2]; 
var userIds = [3, 5, 1, 9]; 

var pairs = _.zipWith(prices, userIds, function(p, u) { 
    return { price: p, userId: u }; 
}); 

這會給你一個對象,如:

[ 
    { price: 1, userId: 3 }, 
    { price: 5, userId: 5 }, 
    ... etc 
] 

然後進行排序,你可以簡單地使用JavaScript排序:

pairs.sort(function(p) { return p.price }); 

如果你真的需要它的用戶id數組,你可以拿回來,排序後:

var sortedUserId = pairs.map(function(p) { return p.userId }); 
// returns [ 3, 9, 5, 8 ];