JS——array.map()、reduce()和reducer(归纳函数)

array.map()

map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组
这里的map不是“地图”的意思,而是指“映射”。

语法

array.map(function(currentValue,index,arr), thisValue)

参数说明:

currentValue index arr thisValue
必需 可选 可选 可选
当前元素的值 当前元素的索引值 当前元素属于的数组对象 对象作为该执行回调时使用,传递给函数,用作 “this” 的值。如果省略,或者传入 null、undefined,那么回调函数的 this 为全局对象。

例子:

//将arr1的元素加1,并返回arr2
var arr1 = ee.List([15,16,17]);
var arr2 = arr1.map(function(value) {
     
 return ee.Number(value).add(1);
});
print("arr1+1: ", arr2);
//获取email地址
var users = [
  {
     name: "张含韵", "email": "[email protected]"},
  {
     name: "江一燕",   "email": "[email protected]"},
  {
     name: "李小璐",  "email": "[email protected]"}
];
var emails = users.map(function (user) {
      return user.email; });
print(emails);

reducer(归纳函数)

语法

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数说明:

total currentValue currentIndex arr initialValue
必需 可选 可选 可选 可选
初始值, 或者计算结束后的返回值 当前元素的值 当前元素的索引 当前元素属于的数组对象 传递给函数的初始值

应用场景:

reduce(归纳)方法具有分散运算的特点,常见于下面几种应用之中:

  • 两相比较最后取出特定的值(最大或最小值)
  • 计算所有成员(值),总合或相乘
  • 其它需要两两处理的情况(组合巢状数组等等)

例子:

//各元素相加
let sum = [0, 1, 2, 3].reduce(function (accumulator, ) {
     
  return accumulator + currentValue
}, 0)
// sum is 6

reduce()

  • 数据集减少到单个聚合值:通过定义起点来运行。当该方法迭代每个值时,该起点将被修改并向下传递。
  • reduce函数的返回结果类型和传入的初始值相同
  • reduce() 是数组的归并方法,与forEach()、map()、filter()等迭代方法一样都会对数组每一项进行遍历,但是reduce() 可同时将前面数组项遍历产生的结果与当前遍历项进行运算,这一点是其他迭代方法无法企及的。

语法

arr.reduce(function(prev,cur,index,arr){
     
...
}, init);

arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;

index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。
常用的参数只有两个:prev 和 cur

map参考:
https://www.runoob.com/jsref/jsref-map.html
https://www.cnblogs.com/moqiutao/p/7097419.html
reducer参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
https://www.runoob.com/jsref/jsref-reduce.html
reduce参考:
浅谈JS中 reduce() 的用法

你可能感兴趣的:(JS)