हम ऑब्जेक्ट सरणी को किसी अन्य ऑब्जेक्ट सरणी मान के आधार पर कैसे सॉर्ट कर सकते हैं, जैसे हमारे पास ऑब्जेक्ट सरणी है:

var _userEnd = [{"userID":554,"tEnd":6},{"userID":597,"tEnd":3},{"userID":605,"tEnd":3},{"userID":617,"tEnd":1},{"userID":553,"tEnd":1},{"userID":616,"tEnd":1},{"userID":596,"tEnd":0}]

इसमें इंडेक्स 1,2,3,4,5 कुंजी "tEnd" यानी 3 और 1 का समान मान है, इसलिए मुझे केवल उन इंडेक्स को किसी अन्य ऑब्जेक्ट सरणी के आधार पर सॉर्ट करने की आवश्यकता है

var _profsort=[{"userID":596,"score":100},{"userID":616,"score":95},{"userID":553,"score":100},{"userID":617,"score":85},{"userID":605,"score":95},{"userID":597,"score":85},{"userID":554,"score":100}]

यहां उपयोगकर्ता आईडी 597,605,617,553,616 का स्कोर मान 85,95,85,100,95 है

तो स्कोर के आधार पर, मैं अपना पहला सरणी सॉर्ट करना चाहता हूं आउटपुट होना चाहिए:

[{"userID":554,"tEnd":6},{"userID":605,"tEnd":3},{"userID":597,"tEnd":3},{"userID":553,"tEnd":1},{"userID":616,"tEnd":1},{"userID":617,"tEnd":1},{"userID":596,"tEnd":0}]
2
Sonu 27 मार्च 2018, 15:11

2 जवाब

सबसे बढ़िया उत्तर

Array.reduce का उपयोग करके userID द्वारा score का ऑब्जेक्ट बनाएं। tEnd के आधार पर क्रमित करें, और यदि यह score के बराबर क्रमबद्ध है, तो आपको sortObject से userId मिलता है:

var _userEnd = [{"userID":554,"tEnd":6},{"userID":597,"tEnd":3},{"userID":605,"tEnd":3},{"userID":617,"tEnd":1},{"userID":553,"tEnd":1},{"userID":616,"tEnd":1},{"userID":596,"tEnd":0}]

var _profsort=[{"userID":596,"score":100},{"userID":616,"score":95},{"userID":553,"score":100},{"userID":617,"score":85},{"userID":605,"score":95},{"userID":597,"score":85},{"userID":554,"score":100}]

var sortObj = _profsort.reduce((r, o) => {
  r[o.userID] = o.score;

  return r;
}, Object.create(null));

_userEnd.sort((a, b) => b.tEnd - a.tEnd || sortObj[b.userID] - sortObj[a.userID]);

console.log(_userEnd);
0
Ori Drori 28 मार्च 2018, 03:12

आप tEnd का डेल्टा ले सकते हैं और score ढूंढ सकते हैं और उस डेल्टा को ले सकते हैं।

function getScore(uID) {
    return (_profsort.find(({ userID }) => userID === uID) || { score: 0 }).score;
}

var _userEnd = [{ userID: 554, tEnd: 6 }, { userID: 597, tEnd: 3 }, { userID: 605, tEnd: 3 }, { userID: 617, tEnd: 1 }, { userID: 553, tEnd: 1 }, { userID: 616, tEnd: 1 }, { userID: 596, tEnd: 0 }],
    _profsort = [{ userID: 596, score: 100 }, { userID: 616, score: 95 }, { userID: 553, score: 100 }, { userID: 617, score: 85 }, { userID: 605, score: 95 }, { userID: 597, score: 85 }, { userID: 554, score: 100 }];
    
_userEnd.sort(function (a, b) {
    return b.tEnd - a.tEnd || getScore(b.userID) - getScore(a.userID);
});

console.log(_userEnd);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
Nina Scholz 27 मार्च 2018, 12:16