为数组中的对象分配优先级值



我有一个 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.CPUb.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);

最新更新