基本上,我要实现的是来自与其他对象组成数组的对象中的最小整数。
r.Collection
是一个可容纳3个对象的数组,因此看起来像这样:
[{foo:"bar",abc:"xyz",number:1},{foo:"car",abc:"hcu",number:2},{foo:"tar",abc:"uif",number:3}]
现在的目标是对这个数组进行排序。找到最低值后,再查看每个数字值。我需要它将整个对象从数组中拉出,以便以后使用。
当前我要执行的操作不起作用,我不确定。我可能做的完全错了
for (o in r.Collection) {
var data = r.Collection[o]
console.log(Math.min(data.number))
}
我知道使用Math.min查找数组中的最小数字,但是当我运行此代码时,每个对象都会被打印出来。
如何对数组进行排序,以将数值最小的对象拉出来?
答案 0 :(得分:4)
Math.min
有点简单-无法在具有多个值的对象中指定min的含义。
您可以使用reduce()
遍历列表中的项目并跟踪当前的最低项目。根据传递给reduce的函数,结果将是列表中最低的:
let l = [{foo:"bar",abc:"xyz",number:1},{foo:"car",abc:"hcu",number:2},{foo:"tar",abc:"uif",number:3}]
let lowest = l.reduce((lowest, item) => item.number < lowest.number ? item: lowest)
console.log(lowest)
答案 1 :(得分:1)
Math.min()
可以工作,但是这需要您使用解构和数组索引的某种按摩来解决0基数的问题。
var r = {};
r.collection = [{foo:"bar",abc:"xyz",number:1},{foo:"car",abc:"hcu",number:2},{foo:"tar",abc:"uif",number:3}];
var min = r.collection[Math.min(...(r.collection.map(function(item){return item.number})))-1];
console.log(min);
答案 2 :(得分:0)
您还可以通过Array.sort对数组进行排序,然后从中选择第一项:
let data = [{foo:"car",abc:"hcu",number:2},{foo:"bar",abc:"xyz",number:1},{foo:"tar",abc:"uif",number:3}]
let result = data.sort((a,b) => a.number - b.number)[0]
console.log(result)
如果您需要max
,只需将b.number - a.number
等的排序反向即可。