不理解使用each和map的循环
Not understanding loops using each and map
我知道每个和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]
- jQuery:循环一个具有不同超时值的循环
- 为什么$().map生成循环引用
- 将map连接到json文件进行循环
- Google Map API - foreach 循环中的信息窗口
- 是“.map”不是用于循环
- jQuery循环将多个数组组合在一起-Mapbox-map.setFilter()
- 使用map而不是for循环在JS中是个坏主意
- JavaScript:为什么原生Array.prototype.map比Chrome控制台中的for循环快
- 使用ReactJS和concatJSX语法进行渲染时的map函数循环
- Javascript - Map代替for循环
- TypeScript编译器无法在for of循环中找到immutable.js Map迭代器
- 不理解使用each和map的循环
- google map addListener方法循环n次
- 使用for循环而不是map以小写形式返回数组中的所有值
- Angular在map循环中承诺
- “Filter"或“;Map"同一个数组使用不同的测试而不循环多次
- 在javascript中使用.map或underscore.js重构while循环
- 为数据库中的每个JSON对象创建新的Google Map Marker循环
- 在map.arc()中循环Json对象
- 当我学习雄辩的javascript时,有一个关于foreach和map的无尽循环