2017-02-13 18 views
0

У меня есть программа Node JS, где мне нужно назначить «приоритет» для разных объектов на основе их значений ЦП. Поэтому я храню все объекты в массиве и сортирую этот массив на основе увеличения значений ЦП.Назначение значения приоритета для объектов в массиве

Мой массив выглядит следующим образом (значения CPU постоянно меняются):

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

Таким образом, низкое значение CPU должен иметь приоритет 1, второй самый низкий приоритет 2 и т.д. Мои мысли добавить в атрибут «priority», а затем просматривайте каждый элемент в массиве и каждый раз добавляйте его к приоритету. Как я могу это достичь?

Это то, что я пытался до сих пор:

// 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) 
}); 

Является ли это правильный подход? Есть лучший способ сделать это? Любая помощь/советы будут оценены.

+3

Действительно ли вам нужен приоритет на объекте? Если он отсортирован, приоритетом всегда является 'length-index' – tymeJV

+1

В вашем случае' priority == index', поэтому вам нужен только индекс элемента в массиве, чтобы иметь приоритет – MysterX

+0

Как уже отмечалось, вам фактически не нужен приоритет , Однако ваша сортировка не работает. Откуда возникает «average_cpu»? – Connum

ответ

0

Чтобы исправить сортировку, вы должны будете использовать a.CPU и b.CPU. Затем, вы можете перебирать свой отсортированный массив и установить prioroty свойство как это:

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);

Этот ответ не использует функции ECMA6 стрелки для того, чтобы быть совместимым с Internet Explorer и старше Android/Версия браузера iOS.

0

После сортировки массива можно использовать forEach цикл, чтобы назначить приоритет каждого 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; 
}); 

Как вы можете видеть, как указывали другие, этот код совершенно бессмысленен, поскольку каждый приоритет - это длина минус указатель. Если вы действительно хотите что-то подсчитать:

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