【问题标题】:NodeJS: Array.reduce to find Min and Max in an Array of ObjectsNodeJS:Array.reduce 在对象数组中查找最小值和最大值
【发布时间】:2018-04-08 18:55:03
【问题描述】:

我有一个对象数组,如下所示:

test = {
  bar: [
    {p: '1',
     v: '2',
     sn: '1509007228'
    },
    {p: '34',
     v: '3',
     sn: '1509007228'
    },
    {p: '0.5',
     v: '4',
     sn: '1509007228'
    }],
  foo: [
    {p: '1',
     v: '2',
     sn: '1509007228'
    },
    {p: '34',
     v: '3',
     sn: '1509007228'
    },
    {p: '0.5',
     v: '4',
     sn: '1509007228'
    }]
}

我发现 SO 上的那个函数就像一个魅力......即使我不确定由于 reduce 函数是 supposed 是如何返回一个 accumulator first然后是当前值。我不确定如何处理累加器,因为它应该返回undefined,但我想这是另一个时间和地点的问题! 所以这里是function(感谢 Tristan Reid):

Array.prototype.hasMin = function(attrib) {
    return this.reduce(function(prev, curr){ 
        return prev[attrib] < curr[attrib] ? prev : curr; 
    });
 }

当我在前一个对象上使用它时,它可以完美地工作:

var blu = test.foo.hasMin('p');

{ p: '0.5', v: '4', sn: '1509007228' }

如果我颠倒逻辑,结果是正确的:即。试图找到最高值:

Array.prototype.hasMin = function(attrib) {
  return this.reduce(function(prev, curr) {
    return prev[attrib] > curr[attrib] ? prev : curr;
  });
};

我猜我可以称它为 hasMax……但你知道,现在它相对无关紧要。

var blu = test.foo.hasMin('p');

{ p: '34', v: '3', sn: '1509007228' }

但是当我尝试在实际对象上使用它时(更多、更长),它似乎停在一个特定的值上:999.00

Here's the full object(我为大小道歉......因为它(> 70,000行),我无法将它粘贴到这里)。

当我尝试“hasMax”功能时,我得到:

var bar = foo.bids.hasMin('p');

{ sn: '1509007228', v: '53.00000000', p: '999.00', 类型:'bids' }

当 'p'Max 的正确对象应该是:

{
      sn: '1509007228',
      v: '0.15200000',
      p: '5721.32',
      type: 'bids'
    },

我不确定array.reduce 函数是否存在限制,导致该函数无法在我的对象上工作? 无论如何,提前感谢您的帮助!

【问题讨论】:

    标签: arrays node.js object max reduce


    【解决方案1】:

    请将您的代码更改为如下所示:

    return parseFloat(prev[attrib]) > parseFloat(curr[attrib]) ? prev : curr;
    

    你的 p 是一个字符串

    p: '5721.32'

    所以你比较字符串,什么时候应该比较数字。

    【讨论】:

    • 上帝......在SO上发布了另一个愚蠢的问题。对不起,谢谢你们的帮助 lurii!
    猜你喜欢
    • 2018-05-03
    • 2015-03-15
    • 1970-01-01
    • 2017-08-18
    • 2021-09-15
    • 2019-04-22
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多