Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从包含对象的数组中查找最小值的最佳方法_Javascript_Arrays - Fatal编程技术网

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次比较)。