2016-02-17 5 views
5

मैं दो js सरणियों है, एक तार, अन्य रंग कोड, कुछ की तरह शामिल हैं:मूल जोड़ी को बनाए रखने के विभिन्न मूल्यों का क्रमबद्ध दो सरणियों

strings = ['one', 'twooo', 'tres', 'four']; 
colors = ['000000', 'ffffff', 'cccccc', '333333']; 

मैं मूल्यों की लंबाई से पहली सरणी सॉर्ट करने के लिए की जरूरत है , पहले लंबा। मुझे पता है कि मैं कुछ ऐसा कर सकता हूं:

strings.sort(function(a, b){ 
    return b.length - a.length; 
}); 

लेकिन इस तरह से मैं प्रत्येक स्ट्रिंग के लिए निर्धारित रंग खो रहा हूं। कुंजी जोड़ों को रखते हुए मैं दोनों सरणी कैसे क्रमबद्ध कर सकता हूं?

+3

क्यों बस नहीं वस्तुओं – Tushar

+2

की एक सारिणी का कभी कभी आप बस कोड की लाइनों के सैकड़ों पुनःकूटित नहीं कर सकते। – Mark

+1

अन्य दो सरणीओं की लंबाई से 1 तक और तीसरा सरणी बनाने की चाल हमेशा होती है। फिर आप अन्य दो सरणी को पुनर्व्यवस्थित कर सकते हैं। या आप अपना खुद का सॉर्ट कोड लिख सकते हैं और एक के बजाय दो स्वैप कर सकते हैं। –

उत्तर

5

Sorting with map से स्पष्ट रूप से कॉपी किया गया और अनुकूलित किया गया।

यह अन्य सरणी के लिए एक ही क्रम क्रम का उपयोग करता है।

// the array to be sorted 
 
var strings = ['one', 'twooo', 'tres', 'four'], 
 
    colors = ['000000', 'ffffff', 'cccccc', '333333']; 
 

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

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

 
// container for the resulting order 
 
var resultStrings = mapped.map(function (el) { 
 
    return strings[el.index]; 
 
}); 
 
var resultColors = mapped.map(function (el) { 
 
    return colors[el.index]; 
 
}); 
 

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

+1

'toLowerCase' कॉल अनावश्यक है क्योंकि तारों की वास्तव में 'sort' – hindmost

+0

के दौरान तुलना नहीं की जाती है, मैंने मूल्य –

+1

बदल दिया है, केवल समस्या मानचित्र यानी 8 के साथ समर्थित नहीं है। – zakaiter

0

आप कुछ इस तरह की कोशिश कर सकते हैं:

var strings = [{name:'one',color:'000000'}, {name:'tres', color:'cccccc'}, {name:'four',color:'333333'}, {name: 'twooo', color:'ffffff'}]; 
 

 
var sorted= strings.sort(function(a,b){ 
 
    return a.name.length > b.name.length; //sort length of name by ascending order 
 
}); 
 

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

0

आप इस कोड का उपयोग कर सकते हैं:

strings = ['one', 'twooo', 'tres', 'four']; 
colors = ['000000', 'ffffff', 'cccccc', '333333']; 

var a = [];//temporary array, will store objects representing each key of both arrays 
strings.forEach(function(k){ 
    a.push({s:k,c:colors[strings.indexOf(k)]}); 
}); 

a.sort(function(a, b){ 
    return b.s.length - a.s.length; 
}); 

strings = []; 
colors = []; 

a.forEach(function(v){ 
    strings.push(v.s); 
    colors.push(v.c); 
}); 

console.log(strings); 
console.log(colors); 
,210

आउटपुट:

["twooo", "tres", "four", "one"] 
["ffffff", "cccccc", "333333", "000000"] 
+0

मुझे यह कोड पसंद है, लेकिन मुझे मिली एक समस्या है arr1 में दोहराए गए मानों को उसी रंग को असाइन किया जाएगा जब मूल सरणी में वे अलग थे। – Mark

संबंधित मुद्दे