如何通过javascript查找对象文字中的最小值和最大值

时间:2015-05-09 17:59:30

标签: javascript jquery angularjs

我希望从对象文字中获取最小值,并希望在anuglarjs中使用它,即: -

scope.data = {
    'studentName' : "Anand", 
    'socialStudies' : "98",
    'english' : "90",
    'math' : "80"
};

最初它将是单个对象,但在添加更多数据后,它将像数组数据一样。所以我想找出每一行的最小值和最大值。

我已经尝试了以下代码的最小值和最大值,但没有得到解决方案,因为它给了我“ NaN ”。

var maxVal = Math.max.apply(Math,scope.data);

请提出一些不错的选择。我在angularjs中使用它。 等待你的回复。

我的整段代码如下: -

scope.save = function (item){
        scope.person = {
            'name' : scope.person.name, 
            'hindi' : scope.person.hindi,
            'english' : scope.person.english,
            'math' : scope.person.math
        };

        if(typeof rootScope.students === 'undefined'){
            rootScope.students = [];
            rootScope.students.push(scope.person);
        }else{
            rootScope.students.push(scope.person);
        }
        location.path("/");
    }

2 个答案:

答案 0 :(得分:1)

这是一种方法,它只检查数字外观属性,并返回最大值和最小值及其相应的属性名称(因为我认为这对知道有用):

scope.data = {
    'studentName' : "Anand", 
    'socialStudies' : "98",
    'english' : "90",
    'math' : "80"
};

function findMaxMin(obj) {
    var max = Number.MIN_VALUE, min = Number.MAX_VALUE, val;
    var maxProp, minProp;
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop)) {
            val = +obj[prop];
            if (!isNaN(val)) {
                if (val > max) {
                    maxProp = prop;
                    max = val;
                }
                if (val < min) {
                    minProp = prop;
                    min = val;
                }
            }
        }
    }
    // if no numeric looking properties, then return null
    if (!maxProp) {
        return null;
    }
    return {minVal: min, minProp: minProp, maxVal: max, maxProp: maxProp};
}

工作演示:http://jsfiddle.net/jfriend00/q81g6ehb/

而且,如果你想在数组上使用它,你可以为每个数组元素调用它:

function findMaxMinArray(arr) {
    var results = [];
    for (var i = 0; i < arr.length; i++) {
        var m = findMaxMin(arr[i]);
        m.obj = arr[i];
        results.push(m);
    }
    return results;
}

工作演示:http://jsfiddle.net/jfriend00/uv50y3e8/

如果您希望它自动检测数组是否已经过去并且只是总是返回结果数组,那么您可以这样做:

function findMaxMinAny(obj) {
    var results = [];
    if (Array.isArray(obj)) {
        for (var i = 0; i < arr.length; i++) {
            var m = findMaxMin(arr[i]);
            m.obj = arr[i];
            results.push(m);
        }
    } else {
        // only a single object
        results.push(findMaxMin(obj));
    }
    return results;
}

答案 1 :(得分:0)

使用jQuery.map()将项目转换为新数组,如果回调返回null或未定义该项目将不包括在内。您可以使用它来过滤结果(例如,删除非数字值)。

var data = {
    'studentName' : "Anand", 
    'socialStudies' : "98",
    'english' : "90",
    'math' : "80"
};

var array = $.map( data, function( val ) { 
    return $.isNumeric( val ) ? val : null; 
});

console.log( Math.max.apply( null, array ) ); // 98