4

我的数组是:

var a = new Array();
a[0] = {x: 10,y: 10};
a[1] = {x: 20,y: 50};
a[2] = {x: 30,y: 20};
a[3] = {x: 10,y: 10};

var min = Math.min.apply(null, a.x)不起作用。一些想法?

4

1 回答 1

9

您有正确的想法,.apply但您需要传递一组x值。

var xVals = a.map(function(obj) { return obj.x; });
var min = Math.min.apply(null, xVals);

.map()方法创建了一个新数组,其中包含您在每次迭代中返回的任何内容。

[10, 20, 30, 10]

然后将 Array 作为第二个参数传递给 Array.apply的成员作为单独的参数。所以就好像你这样做了:

Math.min(10, 20, 30, 10) // 10

但既然你需要.map(),你不妨跳过Math.min, 而只是使用.reduce

var min = a.reduce(function(min, obj) { 
                      return obj.x < min ? obj.x : min; 
                   }, Infinity);
于 2013-02-23T16:45:50.240 回答