2017-02-13 20 views
0

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

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

+3

10你真的需要优先对象吗?如果它被排序,优先级总是“长度 - 索引” – tymeJV

+1

在你的情况下'priority == index',所以你只需要索引一个元素在数组中具有优先级 – MysterX

+0

正如其他人所说的,你并不需要优先级。但是,您的排序不起作用。 'average_cpu'突然从哪里来? – Connum

回答

0

要解决你的排序,你将不得不使用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浏览器版本。

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