2017-12-20 60 views
5

कैसे एक ही संपत्ति के साथ वस्तुओं को पाने के लिए और सरणी में अधिकतम मूल्य मैं की तरहकैसे एक ही संपत्ति के साथ वस्तुओं मिलता है और सरणी में अधिकतम मूल्य है करने के लिए - जावास्क्रिप्ट

data = [{title: "test1", version: 1}, 
{title: "test2", version: 3}, 
{title: "test1", version: 2}, 
{title: "test2", version: 2}, 
{title: "test2", version: 1}]; 

और मैं एक डेटा राशि है परिणाम

result = [{title: "test1", version: 2}, 
{title: "test2", version: 3}]; 

क्या मैंने यहां क्या किया है उससे बेहतर तरीके हैं?

var titles = [...new Set(data.map(o=> o.title))]; 
var recentVersions = []; 
for(var i = 0; i < titles.length; i++){ 
     var recentVersion = null; 
     for(var j = 0; j < data.length; j++){ 
     if(titles[i] === data[j].title){ 
      if(!recentVersion){ 
      recentVersion = data[j]; 
      }else if (recentVersion.version < data[j].version){ 
      recentVersion = data[j]; 
      } 
     } 
     } 
     recentVersions.push(recentVersion); 
    } 

उत्तर

1

आप की तरह सरणी तरीकों देखना चाहिए मानचित्र, फ़िल्टर और इस मामले में कम करें:

let result = data.reduce((r, x)=> { 
    if(!r[x.title] || r[x.title].version < x.version) 
     r[x.title] = x; 
    return r; 
}, {}); 

(इस पाठ्यक्रम के एक वस्तु नक्शा है, अपने यूज-केस के आधार पर आप Object.values(result) के लिए एक कॉल के साथ मूल्यों को प्राप्त करने की जरूरत है या वस्तु पर ही पुनरावृति सकता

0

आप filter और map विधि के साथ संयोजन में Math.max विधि का उपयोग कर सकते हैं।

let data = [{title: "test1", version: 1}, {title: "test2", version: 3}, {title: "test1", version: 2}, {title: "test2", version: 2}, {title: "test2", version: 1}]; 
 
let uniqueTitles = [...new Set(data.map(a => a.title))]; 
 
data = uniqueTitles.map(function(key){ 
 
    return { title:key, version : Math.max(...data.filter(a=>a.title == key).map(a=>a.version)) }; 
 
}); 
 
console.log(data);

0

आप अद्वितीय शीर्षक के अपने सरणी से नक्शा उपयोग कर सकते हैं परिणाम आप उम्मीद कर पाने के लिए:

const data = [ 
 
    {title: "test1", version: 1}, 
 
    {title: "test2", version: 3}, 
 
    {title: "test1", version: 2}, 
 
    {title: "test2", version: 2}, 
 
    {title: "test2", version: 1} 
 
]; 
 

 
const titles = [...new Set(data.map(d => d.title))]; 
 
const result = titles.map(title => ({ 
 
    title, 
 
    version: Math.max(...data.filter(d => d.title === title).map(d => d.version)) 
 
})); 
 

 
console.log(result);

1

आप array#reduce का उपयोग करें और एक का उपयोग कर सकते किसी दिए गए शीर्षक के लिए उच्चतम संस्करण संख्या प्राप्त करने के लिए ऑब्जेक्ट देखें।

var data = [{title: "test1", version: 1}, {title: "test2", version: 3}, {title: "test1", version: 2}, {title: "test2", version: 2}, {title: "test2", version: 1}], 
 
    result = Object.values(data.reduce((r,o) => { 
 
     r[o.title] = r[o.title] || {version: 0}; 
 
     if(r[o.title].version < o.version) 
 
     r[o.title] = o; 
 
     return r; 
 
    },{})); 
 
console.log(result);

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

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