介绍
从经典forloop
到forEach()
方法,各种技术和方法被用于在 JavaScript 中迭代数据集。最流行的方法之一是.map()
方法。.map()
通过对父数组中的每个项目调用特定函数来创建一个数组。.map()
是一种非变异方法,它创建一个新数组,而不是变异方法,变异方法只对调用数组进行更改。
这种方法在处理数组时有很多用途。在本教程中,您将了解.map()
JavaScript中四个值得注意的用法:调用数组元素的函数、将字符串转换为数组、在 JavaScript 库中呈现列表以及重新格式化数组对象。
先决条件
本教程不需要任何编码,但如果您有兴趣跟随示例,您可以使用Node.js REPL或浏览器开发人员工具。
-
要在本地安装 Node.js,您可以按照如何安装 Node.js 和创建本地开发环境中的步骤操作。
-
Chrome DevTools可通过下载并安装最新版本的Google Chrome 来获得。
第 1 步 – 对数组中的每一项调用函数
.map()
接受回调函数作为其参数之一,该函数的一个重要参数是该函数正在处理的项目的当前值。这是一个必需的参数。使用此参数,您可以修改数组中的每一项并创建一个新函数。
下面是一个例子:
const sweetArray = [2, 3, 4, 5, 35]
const sweeterArray = sweetArray.map(sweetItem => {
return sweetItem * 2
})
console.log(sweeterArray)
此输出记录到控制台:
Output[ 4, 6, 8, 10, 70 ]
这可以进一步简化以使其更清晰:
// create a function to use
const makeSweeter = sweetItem => sweetItem * 2;
// we have an array
const sweetArray = [2, 3, 4, 5, 35];
// call the function we made. more readable
const sweeterArray = sweetArray.map(makeSweeter);
console.log(sweeterArray);
相同的输出记录到控制台:
Output[ 4, 6, 8, 10, 70 ]
拥有类似sweetArray.map(makeSweeter)
的代码会使您的代码更具可读性。
步骤 2 — 将字符串转换为数组
.map()
已知属于数组原型。在此步骤中,您将使用它将字符串转换为数组。您不是在此处开发适用于字符串的方法。相反,您将使用特殊.call()
方法。
JavaScript 中的一切都是对象,方法是附加到这些对象的函数。.call()
允许您在另一个对象上使用一个对象的上下文。因此,您会将.map()
数组中的上下文复制到字符串中。
.call()
可以传递要使用的上下文的参数和原始函数的参数的参数。
下面是一个例子:
const name = "Sammy"
const map = Array.prototype.map
const newName = map.call(name, eachLetter => {
return `${eachLetter}a`
})
console.log(newName)
此输出记录到控制台:
Output- [ "Sa", "aa", "ma", "ma", "ya" ]
在这里,您使用.map()
了字符串上的上下文并传递了.map()
期望的函数的参数。
这类似于.split()
字符串的方法,只是每个单独的字符串字符可以在返回数组之前进行修改。
第 3 步 – 在 JavaScript 库中呈现列表
JavaScript库一样作出反应的使用.map()
呈现列表中的项目。但是,这需要 JSX 语法,因为该.map()
方法包装在 JSX 语法中。
这是一个 React 组件的示例:
import React from "react";
import ReactDOM from "react-dom";
const names = ["whale", "squid", "turtle", "coral", "starfish"];
const NamesList = () => (
<div>
<ul>{names.map(name => <li key={name}> {name} </li>)}</ul>
</div>
);
const rootElement = document.getElementById("root");
ReactDOM.render(<NamesList />, rootElement);
这是 React 中的一个无状态组件,它呈现一个div
带有列表的 。使用.map()
迭代最初创建的名称数组来呈现单个列表项。这个组件是在 DOM 元素上使用 ReactDOM 呈现Id
的root
。
第 4 步 – 重新格式化数组对象
.map()
可用于遍历数组中的对象,并以与传统数组类似的方式修改每个单独对象的内容并返回一个新数组。此修改是根据回调函数中返回的内容完成的。
下面是一个例子:
const myUsers = [
{ name: 'shark', likes: 'ocean' },
{ name: 'turtle', likes: 'pond' },
{ name: 'otter', likes: 'fish biscuits' }
]
const usersByLikes = myUsers.map(item => {
const container = {};
container[item.name] = item.likes;
container.age = item.name.length * 10;
return container;
})
console.log(usersByLikes);
此输出记录到控制台:
Output[
{shark: "ocean", age: 50},
{turtle: "pond", age: 60},
{otter: "fish biscuits", age: 50}
]
在这里,您使用括号和点表示法修改了数组中的每个对象。此用例可用于在前端应用程序上保存或解析接收到的数据之前处理或压缩接收到的数据。
结论
在本教程中,我们研究了该.map()
方法在 JavaScript 中的四种用法。结合其他方法,.map()
可以扩展的功能。有关更多信息,请参阅我们的如何在 JavaScript 中使用数组方法:迭代方法一文。