这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战
学习贵在坚持, 笔记是灵魂, 温故而知新, 时不时翻一翻, 回顾一下知识点, 加深记忆, 事半功倍!
前文我们学习了 Node.js 实战: 文件系统模块 结合 HTTP 模块- 搭建一个简单本地文件服务器,
通过读取本地的 .json 文件并返回数据, 模拟了数据接口, 就是前后端通信用到的的 数据结构: JSON
在进行数据操作的时候, 很多时候也都是对 数组对象 进行处理的
接下来将会学习 JavaScript 经常打交道的一些结构/方法, 基本的 数据结构: 对象和数组(二)
数组 Array
前文在学习 对象 的时候, 要找到对象具体具有哪些属性, 我们可以使用 Object.keys() 函数.
Object.keys() 接收一个参数(对象), 会列出该对象的所有属性名, 返回元素为属性名的 字符串数组
const obj = { a: 2, b: 1, c: 3 }
console.log(Object.keys(obj))
// -→ ['a', 'b', 'c']
Object.assign() 函数可以把一个对象的所有属性复制到另一个对象
const obj1 = { a: 1, b: 2 }
Object.assign(obj1, { c: 3, d: 4 }
console.log(obj1)
// -→ { a: 1, b: 2, c: 3, d: 4 }
数组是一种专门存储事物序列的对象, 比如我们使用 typeof [], 会返回 object.
比如我们把一些打印日志或者工作日志保存为对象数组:
let todoLists = [
{
"userId": 1,
"isDone": true,
"todo": ["eat", "sleep", "work", "exercise"]
},
{
"userId": 2,
"isDone": false,
"todo": ["eat", "sleep", "work", "exercise"]
},
{
"userId": 3,
"isDone": true,
"todo": ["eat", "sleep", "work", "exercise"]
},
{
"userId": 4,
"isDone": false,
"todo": ["eat", "sleep", "work", "exercise"]
},
// 等等
当我们需要检查数组中是否存在给定的一个值时, 数组有一个 include 方法,
下面我们创建一个检查 todoLists 中是否包含某个选项 的功能函数
function checkTodo(event, todoLists) {
let flag
for (let i = 0; i < todoLists.length; i++) {
let list = todoLists[i]
if (list.todo.include(event)) flag = true
}
return flag
}
数组循环
在上面函数中我们使用了一个循环,
for (let i = 0; i < todoLists.length; i++) {
let item = todoLists[i]
// 对 item 做一些工作
}
这种最常见的循环在 JavaScript 中也是最基础的: 逐个元素遍历数组要编写很多东西,为此,需要运行一个等于数组长度的计数器,并依次取出每个元素。
在现代 JavaScript 中, 我们编写这样的循环可以有更简便的一些方法。比如 for... of
for (let event of todoLists) {
console.log(`${event.todo.length} events.`)
}
在变量定义之后接 of 单词,它将循环遍历 of 之后给定的值的元素, 当 for 循环看起来像这样时。这不仅适用于数组,也适用于字符串和其他一些数据结构。
更多数组遍历方法
当然还有更多遍历数组的方法, 如:
-
forEach方法也是最简单、最常用的数组遍历方法,它提供一个回调函数,可用于处理数组的每一个元素,默认没有返回值
-
map工作中常用的 方法, 不改变原数组, 经常对数据进行遍历操作 -
filter方法 -
some方法 -
every方法 -
reduce方法
数组的其他方法
这里介绍一些很常用的数组方法。
indexOf
在搜索数组的特定值的时候, 数组提供了 indexOf方法, 此方法从数组开始到结束搜索数组并返回查找到的给定值的索引; 如果找不到, 则返回 -1.
lastIndexOf
lastIndexOf 方法是从数组末尾开始查找,
push 和 pop,
它们在数组的末尾添加和删除元素。
unshift 和 shift
而在数组的开头添加和删除元素的相应方法称为 unshift 和 shift.
let todolist = []
function remember(task) {
todolist.push(task)
}
function getTask() {
return todolist.shift()
}
function rememberUrgently(task) {
todolist.unshift(task)
}
上面简单的程序代码用于管理任务队列。可以通过调用 remember("task") 将任务添加到队列的末尾(push),当你准备做某事时,可以调用 getTask() 从队列中获取(并删除)开头的项。rememberUrgently 函数也添加一个任务,但将其添加到队列的前面面不是后面。
slice 可以复制整个数组
当没有给出结束索引时,slice 将获取起始索引之后的所有元素。还可以省略起始索引以复制整个数组。
console.log([0, 1, 2, 3, 4].slice(2, 4)) // →[2,3]
console.log([0, 1, 2, 3, 4].slice(2)) // →[2,3,4]
concat
concat 方法可可以用于将数组拼接在一起以创建新数组,类似于+运算符对字符串所做的操作。
removeItem 函数: 以下示例显示了 concat 和 slice 操作数组。它接收一个数组和一个索引,并返回一个新数组,此数组是原始数组的副本,其中删除了给定索引处的元素。
function removeItem(array, index) {
return array.slice(0, index)
.concat(array.slice(index + 1))
}
console.log(removeItem(['a', 'b', 'c', 'd', 'e'], 2))
// -→ ['a', 'b', 'd', 'e']
总结
数据结构: 对象和数组 提供了将多个值组合成单个值的方法, 允许分组管理, 更方便的管理使用数据, 而不是乱七八糟的 n 多变量
数组中也存在一些个命名属性, 比如: length 和其他的一些方法. 可以使用 for 等循环遍历方法来对数组数据进行迭代.
更多阅读
更多更文阅读请查收:
【数据结构】数据结构-对象和数组(一)对象 Object、 【数据结构】深入了解 JSON
【Node.js】文件系统模块、 【Node.js】HTTP 模块
【Github】多人协作(二)、 【Github】基本使用(一)
【Git】代码版本控制-git 初识&基本操作(一)、 【Git】进阶(二)
【Node.js】搭建自动化开发环境-基本介绍、 【工具准备】、 【开工】、 【详细步骤(四)】、 【模块处理工具(五)】、 【模块化编程的理解】
跟上节奏, 一步一步! 下文更新预告:
接下来会继续详细学习 JavaScript 的相关方法, 冲鸭!! xdm
学习用到的效率工具, 提高开发效率, 为我们的开发提效赋能!
跟上前进的步伐, 向前加油
加油!! go~~