数据结构-对象和数组(二)-数组

333 阅读2分钟

这是我参与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 函数: 以下示例显示了 concatslice 操作数组。它接收一个数组和一个索引,并返回一个新数组,此数组是原始数组的副本,其中删除了给定索引处的元素。

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】文件系统模块【Node.js】HTTP 模块

【Node.js】效率工具-nvm & nrm 等

【Node.js】包管理工具 npm & yarn 的使用

【Node.js】安装&文档

【Github】多人协作(二)【Github】基本使用(一)

【Git】代码版本控制-git 初识&基本操作(一)【Git】进阶(二)

【Node.js】搭建自动化开发环境-基本介绍【工具准备】【开工】【详细步骤(四)】【模块处理工具(五)】【模块化编程的理解】

跟上节奏, 一步一步! 下文更新预告:

接下来会继续详细学习 JavaScript 的相关方法, 冲鸭!! xdm

学习用到的效率工具, 提高开发效率, 为我们的开发提效赋能!

跟上前进的步伐, 向前加油

加油!! go~~