map(callbackFn)
map(callbackFn, thisArg)map() 方法是一个迭代方法。它为数组中的每个元素调用一次提供的 callbackFn 函数,并用结果构建一个新数组。
callbackFn
数组中的每个元素执行的函数。它的返回值作为一个元素被添加为新数组中。该函数被调用时将传入以下参数:
数组中当前正在处理的元素。
正在处理的元素在数组中的索引。
调用了 map() 的数组本身。
执行 callbackFn 时用作 this 的值。参见迭代方法。
一个新数组,每个元素都是回调函数的返回值。
- const numbers = [1, 4, 9];
- const roots = numbers.map((num) => Math.sqrt(num));
-
- // roots 现在是 [1, 2, 3]
- // numbers 依旧是 [1, 4, 9]
(1).
- const arrayUsers = [
- {
- id: 1,
- username: "Magic",
- address: "Johnson",
- },
- {
- id: 2,
- username: "Kobe",
- address: "Bryant",
- },
- {
- id: 3,
- username: "Lebron",
- address: "James",
- },
- {
- id: 4,
- username: "Kareem",
- address: "Abdul-Jabbar",
- },
- {
- id: 5,
- username: "Shaquille",
- address: "O’Neal",
- },
- ];
- const newUsers = arrayUsers.map((item) => item.username);
- console.log(arrayUsers);
- // [
- // { id: 1, username: 'Magic', address: 'Johnson' },
- // { id: 2, username: 'Kobe', address: 'Bryant' },
- // { id: 3, username: 'Lebron', address: 'James' },
- // { id: 4, username: 'Kareem', address: 'Abdul-Jabbar' },
- // { id: 5, username: 'Shaquille', address: 'O’Neal' }
- // ]
- console.log(newUsers); // [ 'Magic', 'Kobe', 'Lebron', 'Kareem', 'Shaquille' ]
(2).
- const kvArray = [
- { key: 1, value: 10 },
- { key: 2, value: 20 },
- { key: 3, value: 30 },
- ];
-
- const reformattedArray = kvArray.map(({ key, value }) => ({ [key]: value }));
-
- console.log(reformattedArray); // [{ 1: 10 }, { 2: 20 }, { 3: 30 }]
- console.log(kvArray);
- // [
- // { key: 1, value: 10 },
- // { key: 2, value: 20 },
- // { key: 3, value: 30 }
- // ]
- const arrayNumbers = [1, 2, 3, 4];
- const doubles = (nums) => nums.map((num) => (num % 2 === 1 ? num * 2 : num));
- console.log(arrayNumbers); // [ 1, 2, 3, 4 ]
- console.log(doubles(arrayNumbers)); // [ 2, 2, 6, 4 ]
- const arrayLike = {
- length: 3,
- 0: 2,
- 1: 3,
- 2: 4,
- };
- console.log(Array.prototype.map.call(arrayLike, (x) => x ** 2));
- // [ 4, 9, 16 ]
map() 方法读取 this 的 length 属性,然后访问每个整数索引。不能直接使用map()方法。
- const language = "China";
- const map = Array.prototype.map;
- const letters = map.call(language, (eachLetter) => `${eachLetter}`);
-
- console.log(letters); // [ 'C', 'h', 'i', 'n', 'a' ]
与上例子还是有点区别的。
(1).
- let myperson= ['xiaoli','xiaona','xiaoyu','xiaozhu']
- let newArr = myperson.map((name) => ({name:name}))
- console.log(newArr);
-
- (4) [{…}, {…}, {…}, {…}]
-
- 0:
- {name: 'xiaoli'}
- 1:
- {name: 'xiaona'}
- 2:
- {name: 'xiaoyu'}
- 3:
- {name: 'xiaozhu'}
- length:
- 4
- [[Prototype]]:
- Array(0)
- [[Prototype]]:
- Object
- let myage = [18,28,38,19]
- let myperson= ['xiaoli','xiaona','xiaoyu','xiaozhu']
- let newArr = myage.map((age, i) => ({age, name: myperson[i]}))
- console.log(newArr);
-
- (4) [{…}, {…}, {…}, {…}]
- xiaoyu.js:4
- 0:
- {name: 'xiaoli', age: 18}
- 1:
- {name: 'xiaona', age: 28}
- 2:
- {name: 'xiaoyu', age: 38}
- 3:
- {name: 'xiaozhu', age: 19}
- length:
- 4
这样更好理解给些,ES6语法。
7.与parseInt()
- const returnInt = (element) => parseInt(element, 10);
-
- let arr1=["1", "2", "3"].map(returnInt); // [1, 2, 3]
- // 实际结果是一个数字数组(如预期)
-
- // 与上面相同,但使用简洁的箭头函数语法
- let arr2=["1", "2", "3"].map((str) => parseInt(str)); // [1, 2, 3]
-
- // 但与 parseInt() 不同,Number() 还会返回一个浮点数或(解析)指数表示法:
- let arr4=["1.1", "2.2e2", "3e300"].map(Number); // [1.1, 220, 3e+300]
-
- // 为了进行比较,如果我们对上面的数组使用 parseInt():
- let arr5=["1.1", "2.2e2", "3e300"].map((str) => parseInt(str)); // [1, 2, 3]
-
- console.log(arr1);
- console.log(arr2);
- console.log(arr4);
- console.log(arr5);
-
- (3) [1, 2, 3]
- (3) [1, 2, 3]
- (3) [1.1, 220, 3e+300]
- (3) [1, 2, 3]
有时间继续学习。