从包含对象的数组中查找最小值的最佳方法

时间:2015-01-15 18:13:17

标签: javascript arrays

我想找出一个包含数组中键的最小值的对象。

var tempArr = [{name: 'john', age: 23}, {name: 'jonny', age: 27}, {name: 'roony', age: 13}, {name: 'david', age: 33}];

我希望结果是

{name: 'roony', age: 13}

没有使用for循环有任何直接的方法来找出结果,就像我们可以为普通数组

做的那样

例如: 如果数组是 -

var arr = [11,4,22,3,5,55];

我们可以通过以下方式实现目标:

Math.min.apply(null, arr)

3 个答案:

答案 0 :(得分:3)

你应该使用reduce:

min = tempArr.reduce(function(previousValue, currentValue, index, array) {
    return (currentValue.age < previousValue.age ? currentValue : previousValue);
});

任何涉及排序的解决方案都不是最理想的。

答案 1 :(得分:1)

@ antyrat的解决方案更明确,但我想我会提供另一种方式:

var people=[{name: 'john', age: 23}, {name: 'jonny', age: 27}, {name: 'roony', age: 13}, {name: 'david', age: 33}];

var youngestPerson=people.reduce(function(youngestPerson,person){
    return person.age<youngestPerson.age ? person : youngestPerson; 
},people[0]);

console.log(youngestPerson);

答案 2 :(得分:0)

是的,您可以使用sort方法:

var tempArr = [{name: 'john', age: '23'}, {name: 'jonny', age: '27'}, {name: 'roony', age: '13'}, {name: 'david', age: '33'}];
tempArr = tempArr.sort( function( a, b ) {
    var AgeA = parseInt( a.age, 10 );
    var AgeB = parseInt( b.age, 10 )
    if ( AgeA < AgeB ) return -1;
    else if ( AgeA > AgeB ) return 1;
    else return 0;
});
console.log(tempArr);
console.log(tempArr[0]); // is the record with smallest `age` value