获取对象属性中最小/最大值的快速方法

129

我在JavaScript中有一个对象,它长得像这样:

{ "a":4, "b":0.5 , "c":0.35, "d":5 }

有没有一种快速的方法可以在不必遍历所有属性的情况下获取属性中的最小值和最大值?因为我拥有的对象非常大,并且我需要每两秒获取一次最小/最大值。(对象的值保持变化)。


3
@Oleg:鉴于目前只有这些信息,很可能是JSON格式。 Youssef:将JSON解析为对象,并迭代其属性。 - Felix Kling
2
JSON是对象的字符串表示。当您将JSON解析为一个对象时,它不再处于JSON格式中。 - altschuler
这是否意味着每两秒钟您都会获得新的JSON,其中包含所有数据? - Felix Kling
不需要。我有数据,每两秒钟对某些字段进行数学运算,然后需要获取新的最小/最大值。 - Y2theZ
1
我在您的问题中自作主张地修复了JSON->对象,因为评论证实这正是您的意思。 - Oleg V. Volkov
显示剩余6条评论
16个回答

2
使用 lodash 库,你可以编写更短的代码。
_({ "a":4, "b":0.5 , "c":0.35, "d":5 }).values().max();

你能解释一下 _() 吗?对我来说,在 lodash 中,_ 是不可调用的。 - Greg Wozniak

2

对于不同深度的嵌套结构,例如{node: {leaf: 4}, leaf: 1},可以使用lodash或underscore实现如下:

function getMaxValue(d){
    if(typeof d === "number") {
        return d;
    } else if(typeof d === "object") {
        return _.max(_.map(_.keys(d), function(key) {
            return getMaxValue(d[key]);
        }));
    } else {
        return false;
    }
}

2
var newObj = { a: 4, b: 0.5 , c: 0.35, d: 5 };
var maxValue = Math.max(...Object.values(newObj))
var minValue = Math.min(...Object.values(newObj))

3
回答旧问题时,如果您能提供一些上下文来解释您的答案如何有助于解决问题,那么对其他StackOverflow用户来说,您的答案将更加有用,特别是对于已有被接受答案的问题。请参见:如何撰写优质答案 - David Buck

1
   obj.prototype.getMaxinObjArr = function (arr,propName) {
        var _arr = arr.map(obj => obj[propName]);
        return Math.max(..._arr);
    }

0
如果我们要对日期时间值进行排序,则按照以下描述的步骤进行。

const Obj = {
    "TRADE::Trade1": {
        "dateTime": "2022-11-27T20:17:05.980Z",
    },
    "TRADE::Trade2": {
        "dateTime": "2022-11-27T20:36:10.659Z",
    },
    "TRADE::Trade3": {
        "dateTime": "2022-11-27T20:28:10.659Z",
    }
} 


const result = Object.entries(Obj).sort((prev, next) => new Date(prev[1].dateTime) - new Date(next[1].dateTime))

console.log(result)


0
这对我有效:
var object = { a: 4, b: 0.5 , c: 0.35, d: 5 };
// Take all value from the object into list
var valueList = $.map(object,function(v){
     return v;
});
var max = valueList.reduce(function(a, b) { return Math.max(a, b); });
var min = valueList.reduce(function(a, b) { return Math.min(a, b); });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接