NodeJS:Array.reduce在对象数组中查找Min和Max

时间:2017-10-27 08:16:07

标签: arrays node.js object max reduce

我有一组对象,如:

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返回累加器首先然后是当前值。我不确定如何处理累加器,因为它应该返回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:&#39; 0.5&#39;,v:&#39; 4&#39;,sn:&#39; 1509007228&#39; }

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

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:&#39; 34&#39;,v:&#39; 3&#39;,sn:&#39; 1509007228&#39; }

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

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

当我尝试'hasMax&#39;我得到的功能:

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

{sn:&#39; 1509007228&#39;,v:&#39; 53.00000000&#39;,p:&#39; 999.00&#39;,输入:&#39;出价&#39; }

当&amp; p&#39; Max的正确对象应为:

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

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

1 个答案:

答案 0 :(得分:4)

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

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

p 是一个字符串

  

p:&#39; 5721.32&#39;

所以你比较字符串,比较数字。