我有兩個數組中的值,可以說 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
我有兩個數組中的值,可以說 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
從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>');
第一種方法會發生四種不同的迭代! –
@RajaprabhuAravindasamy的確如此。那來自MDN。 –
很難開一個更好的解決方案,而無需知道整個的用例。這就是說,如果你需要通過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
};
大廈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 ];
爲什麼你有兩個數組?這可以通過具有ID和價格屬性的單個數組來完成嗎? – rrowland
@rrowland,這是服務器現在所擁有的,我該如何提高? –