Javascript 从包含对象的数组中查找最小值的最佳方法
我想找出数组中键值最小的对象Javascript 从包含对象的数组中查找最小值的最佳方法,javascript,arrays,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];
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)
是的,您可以使用以下方法:
var tempArr=[{name:'john',age:'23'},{name:'jonny',age:'27'},{name:'runy',age:'13'},{name:'david',age:'33'}];
tempArr=tempArr.sort(函数(a,b){
var AgeA=parseInt(a.age,10);
var AgeB=parseInt(b.age,10)
如果(AgeAAgeB)返回1;
否则返回0;
});
控制台日志(tempArr);
console.log(tempArr[0]);//是具有最小'age'值的记录
是,您可以使用以下方法:
var tempArr=[{name:'john',age:'23'},{name:'jonny',age:'27'},{name:'runy',age:'13'},{name:'david',age:'33'}];
tempArr=tempArr.sort(函数(a,b){
var AgeA=parseInt(a.age,10);
var AgeB=parseInt(b.age,10)
如果(AgeAAgeB)返回1;
否则返回0;
});
控制台日志(tempArr);
console.log(tempArr[0]);//是具有最小'age'值的记录
您应该使用reduce:
min = tempArr.reduce(function(previousValue, currentValue, index, array) {
return (currentValue.age < previousValue.age ? currentValue : previousValue);
});
min=tempArr.reduce(函数(前一个值、当前值、索引、数组){
返回值(currentValue.age
任何涉及排序的解决方案都是次优的。您应该使用reduce:
min = tempArr.reduce(function(previousValue, currentValue, index, array) {
return (currentValue.age < previousValue.age ? currentValue : previousValue);
});
min=tempArr.reduce(函数(前一个值、当前值、索引、数组){
返回值(currentValue.age
任何涉及排序的解决方案都是次优的。@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);
var people=[{name:'john',年龄:23},{name:'jonny',年龄:27},{name:'runy',年龄:13},{name:'david',年龄:33}];
var youngestPerson=people.reduce(函数(youngestPerson,person){
return person.age@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);
var people=[{name:'john',年龄:23},{name:'jonny',年龄:27},{name:'runy',年龄:13},{name:'david',年龄:33}];
var youngestPerson=people.reduce(函数(youngestPerson,person){
return person.age使用sort()
或map()
为什么你的数字是字符串?@epascarello:对不起,输入错误,它们是数字。排序方法对包含对象的数组有效吗?下面是使其有效的细节@robieee为什么不使用for循环?在许多情况下,我都同意。但是对于这个例子,请比较一下如何使用for
循环to我下面的答案使用了reduce
。后者真的与不相关的簿记关系不大吗?使用sort()
或map()
为什么你的数字是字符串?@epascarello:对不起,输入错误,它们是数字。排序方法对包含对象的数组有效吗?下面是使其有效的细节@robieee为什么不使用for循环?在许多情况下,我都同意。但是对于这个例子,请比较一下如何使用for
循环to我下面的答案使用了reduce
。后者真的没有那么在意无关的簿记吗?排序是寻找最小值的一种非常低效的方法,for循环的代码会更少。排序是寻找最小值的一种非常低效的方法,for循环的代码会更少。请不要忘记reduce+1@Daniel Robinson:为什么排序是次优的?找到最小值只需要n次比较。排序需要更多的比较。(例如,快速排序在平均情况下需要n次对数n次比较,在最坏情况下需要n^2次比较).总是忘记减少+1@Daniel罗宾逊:为什么排序是次优的?找到最小值只需要n次比较。排序需要更多的比较。(例如,快速排序在平均情况下需要n次对数n次比较,在最坏情况下需要n^2次比较)。