Ich habe so etwas

var hash = {};
hash['a'] = ["a", "b", "c", "d", "e"];
hash['b'] = ["a", "b", "c"];
hash['k'] = ["q", "b"];

Math.max(Object.keys(hash)
    .map(function(key) {
      return hash[key].length;
    })
  )

Es gibt 5 zurück, aber ich möchte gleichzeitig den Hash-Schlüssel 'a' erhalten.

Ist es möglich??

1
whitebear 19 Feb. 2020 im 12:23

3 Antworten

Beste Antwort

Kombinieren Sie Object.entries() und Array.prototype.reduce() um den Schlüssel und die Elemente hinter diesem Schlüssel (und ihre Länge) zu erhalten

var hash = {
   a: ["a", "b", "c", "d", "e"]
  ,b: ["a", "b", "c"]
  ,k: ["q", "b"]
};

var result = Object.entries(hash)
                   .reduce((r, c) => r[1].length > c[1].length ? r : c);
                   
console.log(result);
3
Andreas 19 Feb. 2020 im 09:55

Ich habe diesen Ansatz für Ihr Problem verwendet:

var hash = {};
hash['a'] = ["a", "b", "c", "d", "e"];
hash['b'] = ["a", "b", "c"];
hash['k'] = ["q", "b"];

var largestInfo = {
  key:'',
  length:0
}

 Object.keys(hash).map(function(key) {
    if(hash[key].length > largestInfo.length){
        largestInfo.key = key;
        largestInfo.length = hash[key].length;
    }
    return hash[key].length;
});
console.log(largestInfo);
0
harsh_apache 19 Feb. 2020 im 11:07

Erfüllt dies Ihre Anforderung?

Ich habe hier sort anstelle von Math.max verwendet, um die Maxima zu finden

var hash = {};
hash['a'] = ["a", "b", "c", "d", "e"];
hash['b'] = ["a", "b", "c"];
hash['k'] = ["q", "b"];

var result = Object.keys(hash)
    .map(function(key) {
      return {[key]: hash[key].length};
    }).sort(function(a, b){ 
      return a.key > b.key
    })[0]
  
  
console.log(result);
0
Akash Shrivastava 19 Feb. 2020 im 09:35