Node.js最高对象值

时间:2017-01-23 06:21:37

标签: javascript node.js object

使用fs.readfile()我读取一个文件并将该文件的数据放在一个对象中。但是我怎样才能获得具有最高价值的行?

[ { id: 'AA', naam: 'de eerste', waarde: 100 },
  { id: 'BB', naam: 'de tweede', waarde: 120 },
  { id: 'CC', naam: 'de derde', waarde: 130 },
  { id: 'DD', naam: 'de laatste', waarde: 90 },
  { id: 'CC', naam: 'de derde', waarde: 150 },
  { id: 'CC', naam: 'de derde', waarde: 120 } ]

我指的是值为150的对象行。

2 个答案:

答案 0 :(得分:5)

使用Array#reduce方法通过自定义函数缩减为单个对象。



var data = [ { id: 'AA', naam: 'de eerste', waarde: 100 }, { id: 'BB', naam: 'de tweede', waarde: 120 }, { id: 'CC', naam: 'de derde', waarde: 130 }, { id: 'DD', naam: 'de laatste', waarde: 90 }, { id: 'CC', naam: 'de derde', waarde: 150 }, { id: 'CC', naam: 'de derde', waarde: 120 } ]

console.log(
  data.reduce(function(prev, next) {
    // compare object properties and return object with highest value
    return prev.waarde >= next.waarde ? prev : next;
  })
)




答案 1 :(得分:1)

@ Pranav C Balan答案的替代方法可以使用for循环。

逻辑

  • 循环对象并创建一个虚拟变量来保存具有最大值的对象。
  • 现在每次迭代,如果value大于当前Max,则替换虚拟变量

var data = [ { id: 'AA', naam: 'de eerste', waarde: 100 }, { id: 'BB', naam: 'de tweede', waarde: 120 }, { id: 'CC', naam: 'de derde', waarde: 130 }, { id: 'DD', naam: 'de laatste', waarde: 90 }, { id: 'CC', naam: 'de derde', waarde: 150 }, { id: 'CC', naam: 'de derde', waarde: 120 } ]

var result = data[0];

for(var i = 1; i< data.length; i++){
  if(result.waarde < data[i].waarde)
    result = data[i];
}

console.log(result)

另请注意,对象是按引用传递的,因此如果在循环之后执行result.waarde = 0,则会覆盖data中的对象。

result = data[i];只会在结果中复制reference data[i],而不是整个对象。