不理解使用each和map的循环

Not understanding loops using each and map

本文关键字:map 循环 each 不理解      更新时间:2023-09-26

我知道每个和map都有本地函数(我想),但我们正在学习幕后发生的事情。所以看看这个…

var sampleInput = [ 
  [1, 3, 2], 
  [4, 23, 100],
  [7, 6, 3, -2]
];
function eachNew(coll, f) {
  if (Array.isArray(coll)) {
    for (var i = 0; i < coll.length; i++) {
      f(coll[i], i);
    }
  } else {
    for (var key in coll) {
      f(coll[key], key);
    }
  }
}
function map(array, f) {
  var acc = [];
  eachNew(array, function(element, i) {
    acc.push(f(element, i));
  });
  return acc;
}
function max(array) {
    var largest = 0;
    eachNew(array, function(m){
        if (largest < m) { 
            largest = m};
    });
    return largest;
}

我想写一个函数maximums,它输出一个数组每个数组的最大值所以[3, 100, 7]

我不知道该怎么写。这是我的猜测…

function maximum(array) {
    var array = [];{
    return map(array, max(array))
    };
    return array.push(max);
}

这看起来不像是一个很好的猜测,但我一直在努力!请帮忙,谢谢:)

你实际上就在这里,只是让它变得有点复杂。记住,根据您的规范,map将function作为其第二个参数。这个函数将应用于作为第一个参数传递的数组。所以你只需要使用你开发的两种成分。因此,maximum变得相当简单:

function maximum(array) {
    return map(array, max);
}
var numbers = maximum(sampleInput);
console.log(numbers);

看起来你这样做是为了学校,所以在评论中,我希望你告诉我们为什么上面的工作。而且,你试图将max(array)作为第二个参数传递给映射是什么问题。div;)

首先确定这些函数的作用。

eachNew:接受一个对象和一个函数。如果对象是数组,则按顺序调用传递每个项和索引的函数。如果对象不是数组,则按顺序调用传递每个值和键的函数。(这是相似的东西,但不完全相同。)

map:给定一个数组和一个函数,使用eachNew构建一个新数组,并在每个项目上调用f函数,使用返回的内容构建新数组。f则是对每一项进行变换,而map则对整个数组进行变换。

max:给定一个数组,使用eachNew确定并返回数组的最大元素。

你的目标是编写一个函数,将数组中的元素转换为数字数组,其中每个数字都是最大值。你有一个变换函数(map)和一个最大值函数(max)。

<transform>(<arrayOfArrays>, <functionThatTurnsAnArrayIntoAMaximum>) => <arrayOfMaximums>

您可以根据需要调整它(我没有进行数据类型检查,所以您可能想要添加它)。我在代码中添加了注释,以便您可以跟踪它。我不想给出完整的答复,只是用另一种方法来解决你的问题。

'use strict';
function map (array, f) {
  for (let element_index = 0; element_index < array.length; element_index++) {
    f(array[element_index]);
  }
}
function maximum (arrays) {
  let max_values = []; /* This will hold the max values */
  for (let array_index = 0; array_index < arrays.length; array_index++) {
    const array = arrays[array_index]; /* This is the current array of values */
    /*
    let's say for now, that the max value is the first element of the array.
    (assuming it holds numbers, and at least one of them)
    */
    let max_value_of_the_array = array[0];
    map(array, value => {
      /* This function will be applied on each value of the array.
         If the value is greater than the setted before, then change it.
         If this condition is never met, then the max value is already setted.
      */
      if (value > max_value_of_the_array) {
        max_value_of_the_array = value;
      }
    })
    /* Push the max value in the max values array */
    max_values.push(max_value_of_the_array);
  }
  /* After all arrays of the array has been iterated, and all max values getted,
  return the max_values array */
  return max_values;
}
const values = [
  [1, 5, 3],
  [11, 15, 13],
  [21, 25, 23]
]
console.log(maximum(values)); // [5, 15, 25]