2016-08-11 5 views
0

Mein js Objekt:Javascript: einen Schlüssel mit Maximalwert in einem Objekt finden Schlüssel nach Filterung basiert auf einem Array

data_obj = {'p1': 1, 'p2':2, 'p3':3} 

mein Array

data_array = ['p1', 'p3'] 

Jetzt will ich das Objekt filtern auf dem Array. Erwartetes Ergebnis ist

fil_obj = {'p1': 1, 'p3':3} 

Nun, dann finden Sie den Schlüssel mit einem maximalen Wert. Erwartetes Ergebnis ist

p3 

Da ich Objekt mit Tausenden von Elementen habe, erwarte ich eine sehr effiziente Lösung. Da ich d3js für dieses Projekt verwende, wäre eine Lösung basierend auf d3js wie d3.max großartig.

+2

* "erwarte ich eine sehr effiziente Lösung" * - Was ist Ihre Lösung? – nnnnnn

+0

Wörtlich keine :( – ramesh

+0

Schreiben Sie einfach ein Programm, um dies zu tun. –

Antwort

2

Sie könnten die gewünschten Eigenschaften durchlaufen und gib die Max-Taste zurück.

var data_obj = { p1: 1, p2: 2, p3: 3}, 
 
    data_array = ['p1', 'p3'], 
 
    result = data_array.reduce(function (r, a, i) { 
 
     return !i || data_obj[r] < data_obj[a] ? a : r; 
 
    }, undefined); 
 

 
console.log(result);

+0

Ich dachte, das gefilterte Objekt war auch eine erforderliche Ausgabe.Ich denke nicht.Eine schöne Lösung für nur den Schlüssel. – nnnnnn

+0

Funktioniert! Danke :) – ramesh

1

Ich habe noch nie verwendet, d3, aber es scheint mir das Ergebnis ziemlich effizient mit einem einzigen Aufruf .reduce() bekommen kann:

var data_obj = {'p1': 1, 'p2':2, 'p3':3}; 
 
var data_array = ['p1', 'p3']; 
 

 
var results = data_array.reduce((r,v)=>{ 
 
    if (v in data_obj) { 
 
    r.data[v] = data_obj[v]; 
 
    if (data_obj[v] > r.maxVal) { 
 
     r.maxKey = v; 
 
     r.maxVal = data_obj[v]; 
 
    } 
 
    } 
 
    return r; 
 
}, {data:{}, maxKey:null, maxVal:Number.NEGATIVE_INFINITY}); 
 

 
console.log(results);

Verwandte Themen