map() 函数内的索引

IT技术 javascript functional-programming immutable.js
2021-01-17 04:30:17

我缺少如何map使用Listfrom获取函数内部索引号的选项Immutable.js

var list2 = list1.map(mapper => { a: mapper.a, b: mapper.index??? }).toList();

文档显示的是map()回报Iterable<number, M>有什么优雅的方式可以满足我的需求吗?

4个回答

您将能够通过其第二个参数index获取该map方法的当前迭代

例子:

const list = [ 'h', 'e', 'l', 'l', 'o'];
list.map((currElement, index) => {
  console.log("The current iteration is: " + index);
  console.log("The current element is: " + currElement);
  console.log("\n");
  return currElement; //equivalent to list[index]
});

输出:

The current iteration is: 0 <br>The current element is: h

The current iteration is: 1 <br>The current element is: e

The current iteration is: 2 <br>The current element is: l

The current iteration is: 3 <br>The current element is: l 

The current iteration is: 4 <br>The current element is: o

另见: https : //developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

参数

callback - 生成新数组元素的函数,采用三个参数:

1) currentValue
数组中正在处理的当前元素。

2) index
当前正在处理的元素在数组中的索引。

3) array
调用了数组映射。

@HarshKanchina'X'是一个字符串。
2021-03-18 04:30:17
@HarshKanchina 该map操作用于通过迭代给定数组的元素来构造一个新数组。要回答您的问题,是的,需要 return 语句,对于这种情况,它在每次迭代时都返回值“X”。因此代码的最终产品将是[ 'X', 'X','X','X' ]
2021-03-19 04:30:17
@但 'X' 未在任何地方定义。那么它指的是什么呢?函数如何知道这里 X 指的是什么?
2021-03-21 04:30:17
我希望这个索引从 1 开始,我怎么能做到这一点?
2021-04-03 04:30:17
地图的回调函数是否应该总是有一个 return 语句?代码中的“X”是什么意思?
2021-04-10 04:30:17

Array.prototype.map() 指数:

可以Array.prototype.map()通过回调函数的第二个参数访问索引下面是一个例子:

const array = [1, 2, 3, 4];

const map = array.map((x, index) => {
  console.log(index);
  return x + index;
});

console.log(map);

的其他参数Array.prototype.map()

  • 回调函数的第三个参数公开了调用 map 的数组
  • 的第二个参数Array.map()是一个对象,它将作为this回调函数值。请记住,您必须使用常规function关键字来声明回调,因为箭头函数没有自己的this关键字绑定

例如:

const array = [1, 2, 3, 4];

const thisObj = { prop1: 1 }

const map = array.map((x, index, array) => {
  console.log(array);
  console.log(this)
}, thisObj);

  • 假设你有一个像

   const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    
    arr.map((myArr, index) => {
      console.log(`your index is -> ${index} AND value is ${myArr}`);
    })

> output will be
 index is -> 0 AND value is 1
 index is -> 1 AND value is 2
 index is -> 2 AND value is 3
 index is -> 3 AND value is 4
 index is -> 4 AND value is 5
 index is -> 5 AND value is 6
 index is -> 6 AND value is 7
 index is -> 7 AND value is 8
 index is -> 8 AND value is 9

使用lambda:

import {addIndex, map} from 'ramda';

const list = [ 'h', 'e', 'l', 'l', 'o'];
const mapIndexed = addIndex(map);
mapIndexed((currElement, index) => {
  console.log("The current iteration is: " + index);
  console.log("The current element is: " + currElement);
  console.log("\n");
  return 'X';
}, list);