JavaScript - 使用map函数从数组返回值

时间:2015-11-25 15:35:49

标签: javascript arrays

我想提取每个单个数组的最大数量。我相信它应该可以使用.map函数。

这是我到目前为止所做的,但不幸的是,这会返回“[undefined,undefined,undefined,undefined]”

代码:

function largestOfFour(largestOfFour) {
    largestOfFour.forEach(function(number){
        number.sort(function(a, b){
            return b - a;
        });
        highestValue = number.map(function(number){
            return number[0];
        });
    });
};

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

4 个答案:

答案 0 :(得分:2)

使用Math.max找到每个数组中最大的数字的方法较短:

function largestOfFour(arr) {
  return arr.map(function (el) {
      return Math.max.apply(null, el);
  });
}; // [ 5, 27, 39, 1001 ]

DEMO

答案 1 :(得分:2)

你正在迭代外部数组,

function largestOfFour(largestOfFour) {
    largestOfFour.forEach(function(number){

然后对内部数组进行排序

number.sort(function(a, b){
    return b - a;
});

然后在那些内部数组中,您尝试从每个值获取[0]属性,即undefined

highestValue = number.map(function(number){
// you redefine `number` here to be the value within the inner array
    return number[0];
});

您可能想要做的是map 外部数组:

function largestOfFour(largestOfFour) {
    largestOfFour.map(function(numbers){

对内部数组进行排序:

numbers.sort(function(a, b){
    return b - a;
});

然后返回第一个值:

return numbers[0];

所有这一切可能应该是:

function largestOfFour(largestOfFour) {
    return largestOfFour.map(function(numbers){
        numbers.sort(function(a, b){
            return b - a;
        });
        return numbers[0];
    });
}

虽然有更简单的方法可以找到数组数组的最大值。

一个这样的例子是使用Array.prototype.reduce

function largestValues(outer) {
    return outer.map(function (inner) {
        return inner.reduce(function (prev, current) {
            return Math.max(prev, current);
        }, Number.NEGATIVE_INFINITY);
    });
}

答案 2 :(得分:0)

http://jsfiddle.net/y48qz6hx/ 刚修好你的代码

function largestOfFour(largestOfFour) {
    largestOfFour.forEach(function(number, index){
        number.sort(function(a, b){
            return b - a;
        });
        largestOfFour[index] = number[0];
    });

    alert(largestOfFour);
};

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

答案 3 :(得分:0)

试试这个:



var ar=[[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];

   console.log( ar.map(x=> Math.max.apply(null, x)) )