我有一个Node程序,在这个程序中,我需要根据不同的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)
});
这样做对吗?有更好的方法吗?如有任何帮助/建议,将不胜感激。
发布于 2017-02-13 07:26:45
要修复排序,必须使用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和较早的安卓/iOS浏览器版本兼容。
发布于 2017-02-13 07:26:22
排序数组之后,可以使用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)
发布于 2017-02-13 07:27:20
lowerThan95.map(function(obj,index) {
obj["priority"]=lowerThan95.length-index;
return obj;
});
正如您所看到的,正如其他人所指出的,这段代码非常没有意义,因为每个优先级都是长度减去索引。如果你真的想数一数:
lowerThan95.reduce((val,obj)=>obj.priority= ++val,0);
https://stackoverflow.com/questions/42207302
复制相似问题