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

时间:2017-02-13 15:11:25

标签: javascript arrays node.js for-loop foreach

我有一个Node JS程序,我需要指定优先级'基于CPU值的不同对象。所以我将所有对象存储在一个数组中,并根据增加的CPU值对该数组进行排序。

我的数组看起来像这样(cpu值不断变化):

dom-repeat

因此,最低CPU值应优先级为1,第二低优先级优先级为2等。我的想法是添加优先级'属性,然后遍历数组中的每个元素,并每次添加一个优先级。但是我如何实现这一目标呢?

这是我到目前为止所尝试的:

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

这是正确的做法吗?有一个更好的方法吗?任何帮助/提示将不胜感激。

3 个答案:

答案 0 :(得分:1)

要修复排序,您必须使用a.CPUb.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浏览器版本兼容。

答案 1 :(得分: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)

答案 2 :(得分:0)

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

正如您所看到的,正如其他人所指出的那样,这段代码非常无意义,因为每个优先级都是长度减去索引。如果你真的想要数数:

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