2017-02-13 2 views
0

Ich habe ein Node JS-Programm, wo ich verschiedenen Objekten basierend auf ihren CPU-Werten 'Priorität' zuweisen muss. Daher speichere ich alle Objekte in einem Array und sortiere dieses Array basierend auf steigenden CPU-Werten.Zuweisen eines Prioritätswerts zu Objekten in einem Array

Mein Array sieht wie folgt aus (die CPU-Werte ständig ändern):

var lowerThan95 = [{ 
    'myname': 'abc', 
    'CPU': 10 
}, { 
    'myname': 'gfd', 
    'CPU': 45 
}, { 
    'myname': 'vfd', 
    'CPU': 100 
}, { 
    'myname': 'bvf', 
    'CPU': 80 
}] 

So ist die niedrigste CPU-Wert der Priorität 1 haben sollte, die zweitniedrigste Priorität 2 usw. sind meine Gedanken in hinzufügen ein "priority" -Attribut, und gehen Sie dann durch jedes Element im Array und fügen Sie jedes Mal eins zur Priorität hinzu. Wie erreiche ich das?

Das ist, was ich bisher versucht:

// sorts the array based on ascending cpu values 
lowerThan95.sort(function(a, b) { 
    return parseFloat(a.CPU) - parseFloat(b.CPU); 
}); 

// what do I do here? 
lowerThan95.forEach(function(value) { 
    var priority = priority + 1 
    console.log('pr', priority) 
}); 

Ist das der richtige Ansatz? Gibt es einen besseren Weg, dies zu tun? Jede Hilfe/Tipps wird geschätzt.

+3

Brauchen Sie wirklich die Priorität auf dem Objekt? Wenn es sortiert ist, ist die Priorität immer der 'length-index' – tymeJV

+1

In Ihrem Fall' priority == index' also brauchen Sie nur den Index eines Elements im Array, um Priorität zu haben – MysterX

+0

Wie andere sagten, brauchen Sie eigentlich nicht die Priorität . Ihre Sortierung funktioniert jedoch nicht. Woher kommt plötzlich 'average_cpu'? – Connum

Antwort

0

Ihre Sortierung zuweisen können zu beheben, werden Sie a.CPU und b.CPU verwenden. Dann können Sie iterieren Ihre sortierten Feld und stellen Sie die prioroty Eigenschaft wie folgt:

var lowerThan95 = [{ 
 
    'myname': 'abc', 
 
    'CPU': 10 
 
}, { 
 
    'myname': 'gfd', 
 
    'CPU': 45 
 
}, { 
 
    'myname': 'vfd', 
 
    'CPU': 100 
 
}, { 
 
    'myname': 'bvf', 
 
    'CPU': 80 
 
}] 
 

 
// sorts the array based on ascending cpu values 
 
lowerThan95.sort(function(a, b) { 
 
    return parseFloat(a.CPU) - parseFloat(b.CPU); 
 
}); 
 

 
// what do I do here? 
 
for (var i in lowerThan95) { 
 
    lowerThan95[i].priority = +i+1; 
 
}; 
 

 
console.log(lowerThan95);

Diese Antwort nicht ECMA6 Pfeil Funktionen, um mit dem Internet Explorer kompatibel ist nicht verwendet und ältere Android/iOS Browserversionen.

0

Nachdem Sie Array sortieren Sie forEach Schleife Priorität als jeder index + 1

var lowerThan95 = [{ 
 
    'myname': 'abc', 
 
    'CPU': 10 
 
}, { 
 
    'myname': 'gfd', 
 
    'CPU': 45 
 
}, { 
 
    'myname': 'vfd', 
 
    'CPU': 100 
 
}, { 
 
    'myname': 'bvf', 
 
    'CPU': 80 
 
}] 
 
lowerThan95.sort((a, b) => a.CPU - b.CPU).forEach((e, i) => e.priority = (i + 1)) 
 

 
console.log(lowerThan95)

0
lowerThan95.map(function(obj,index) { 
    obj["priority"]=lowerThan95.length-index; 
    return obj; 
}); 

Wie Sie sehen können, wie andere darauf hingewiesen haben, ist dieser Code ziemlich sinnlos, da jede Priorität Länge minus Index ist. Wenn Sie wirklich hochzählen wollen:

lowerThan95.reduce((val,obj)=>obj.priority= ++val,0); 
Verwandte Themen