我有一个 Node JS 程序,我需要根据它们的 CPU 值为不同的对象分配"优先级"。因此,我将所有对象存储在一个数组中,并根据不断增加的 CPU 值对数组进行排序。
我的数组看起来像这样(cpu 值不断变化(:
var lowerThan95 = [{
'myname': 'abc',
'CPU': 10
}, {
'myname': 'gfd',
'CPU': 45
}, {
'myname': 'vfd',
'CPU': 100
}, {
'myname': 'bvf',
'CPU': 80
}]
因此,最低 CPU 值的优先级应为 1,第二低的优先级应为 2,依此类推。我的想法是添加一个"优先级"属性,然后遍历数组中的每个元素,每次都向优先级添加一个元素。但是,我该如何实现这一点?
这是我到目前为止尝试过的:
// 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)
});
这是正确的方法吗?有没有更好的方法可以做到这一点?任何帮助/提示将不胜感激。
要修复排序,您必须使用 a.CPU
和 b.CPU
。然后,您可以迭代排序数组并设置优先级属性,如下所示:
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 浏览器版本兼容。
对数组进行排序后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)
lowerThan95.map(function(obj,index) {
obj["priority"]=lowerThan95.length-index;
return obj;
});
如您所见,正如其他人指出的那样,此代码毫无意义,因为每个优先级都是长度减去索引。如果你真的想数数:
lowerThan95.reduce((val,obj)=>obj.priority= ++val,0);