【问题标题】:Assigning a priority value to objects in an array为数组中的对象分配优先级值
【发布时间】:2017-07-01 15:07:28
【问题描述】:

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

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

【问题讨论】:

  • 你真的需要对象的优先级吗?如果已排序,则优先级始终为length - index
  • 在你的情况下 priority == index 所以你只需要数组中元素的索引就可以优先
  • 正如其他人所说,您实际上并不需要优先级。但是,您的排序不起作用。 average_cpu怎么突然冒出来的?
  • @Connum 已更正
  • 好吧,说句公道话——我们不知道 OP 稍后想在脚本中对这些对象做什么。也许他/她有充分的理由拥有一个基于 1 的优先级属性,以后可以在处理这些对象时使用该属性。这就是为什么我决定为他的需求发布答案。

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


【解决方案1】:

要修复排序,您必须使用a.CPUb.CPU。然后,您可以遍历已排序的数组并像这样设置 priority 属性:

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 浏览器版本兼容。

【讨论】:

    【解决方案2】:
    lowerThan95.map(function(obj,index) {
        obj["priority"]=lowerThan95.length-index;
        return obj;
    });
    

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

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

    【讨论】:

      【解决方案3】:

      对数组进行排序后,您可以使用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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多