关于前端:现代JavaScript高级教程JavaScript数组

45次阅读

共计 5794 个字符,预计需要花费 15 分钟才能阅读完成。

点击在线浏览,体验更好 链接
古代 JavaScript 高级小册 链接
深入浅出 Dart 链接
古代 TypeScript 高级小册 链接

JavaScript 数组

引言

在 JavaScript 中,数组(Array)是一种重要且广泛应用的数据结构,用于存储和操作一组有序的数据。JavaScript 提供了丰盛的数组办法和属性,使咱们可能不便地对数组进行增删改查等操作。本文将具体介绍 JavaScript 数组的办法 API、属性,并探讨如何模仿实现数组的 API。此外,还将介绍数组的利用场景,帮忙读者更好地了解和利用数组。

1. 数组简介

数组是一种有序的数据汇合,它能够存储多个值,并依据索引拜访和操作这些值。在 JavaScript 中,数组是一种动静类型的数据结构,能够包容任意类型的数据,包含根本类型和对象。

JavaScript 数组的特点包含:

  • 数组的长度是动静可变的,能够依据须要随时增加或删除元素。
  • 数组的索引是从 0 开始的,通过索引能够快速访问和批改数组中的元素。
  • 数组能够蕴含不同类型的元素,甚至能够嵌套蕴含其余数组。

JavaScript 提供了许多办法和属性来操作和解决数组,使得数组成为解决数据的弱小工具。

2. 数组办法 API

JavaScript 数组提供了丰盛的办法来操作数组。以下是一些罕用的办法 API:

增加和删除元素

  • push():在数组开端增加一个或多个元素,并返回新数组的长度。
  • pop():移除并返回数组的最初一个元素。
  • unshift():在数组结尾增加一个或多个元素,并返回新数组的长度。
  • shift():移除并返回数组的第一个元素。
  • splice():从指定地位增加或删除元素。

批改和拜访元素

  • slice():返回数组的一部分,不扭转原数组。
  • concat():将多个数组合并为一个新数组。
  • join():将数组的元素连接成一个字符串。
  • reverse():颠倒数组中元素的程序。
  • sort():对数组元素进行排序。

数组遍历

  • forEach():对数组的每个元素执行指定的操作。
  • map():创立一个新数组,其中的元素是原始数组通过指定操作后的后果。
  • filter():创立一个新数组,其中的元素是合乎指定条件的原始数组元素。
  • reduce():对数组的元素进行累加或合并操作。

数组转换和连贯

  • toString():将数组转换为字符串。
  • toLocaleString():将数组转换为本地化的字符串。
  • join():将数组的元素连接成一个字符串。

数组排序和搜寻

  • sort():对数组元素进行排序。
  • reverse():颠倒数组中元素的程序。
  • indexOf():返回指定元素在数组中首次呈现的索引。
  • lastIndexOf():返回指定元素在数组中最初一次呈现的索引。

其余罕用办法

  • isArray():检测一个值是否为数组。
  • find():返回数组中合乎指定条件的第一个元素。
  • findIndex():返回数组中合乎指定条件的第一个元素的索引。
  • some():检测数组中是否至多有一个元素合乎指定条件。
  • every():检测数组中是否所有元素都合乎指定条件。

以上仅是 JavaScript 数组办法 API 的局部罕用示例,更多具体的办法和用法请参考 MDN Web Docs。

3. 数组属性

JavaScript 数组还有一些罕用的属性,用于形容和操作数组的个性和状态。

  • length:返回数组的长度。
  • constructor:返回创立数组对象的原型函数。
  • prototype:数组对象的原型对象,用于增加新的办法和属性。

这些属性能够帮忙咱们理解数组的构造和信息,以便更好地解决和操作数组。

4. 实现数组 API

为了更好地了解数组的办法和实现原理,咱们能够尝试本人模仿实现一些数组 API 的办法。以下是一些罕用的数组办法的简略模仿实现示例:

实现增加和删除元素的办法

// 模仿实现 push() 办法
Array.prototype.myPush = function(...elements) {
  const len = this.length;
  let i = 0;
  while (i < elements.length) {this[len + i] = elements[i];
    i++;
  }
  return this.length;
};

// 模仿实现 pop() 办法
Array.prototype.myPop = function() {
  if (this

.length === 0) return undefined;
  const lastElement = this[this.length - 1];
  delete this[this.length - 1];
  this.length--;
  return lastElement;
};

// 模仿实现 unshift() 办法
Array.prototype.myUnshift = function(...elements) {
  const originalLength = this.length;
  for (let i = originalLength - 1; i >= 0; i--) {this[i + elements.length] = this[i];
  }
  for (let i = 0; i < elements.length; i++) {this[i] = elements[i];
  }
  this.length = originalLength + elements.length;
  return this.length;
};

// 模仿实现 shift() 办法
Array.prototype.myShift = function() {if (this.length === 0) return undefined;
  const firstElement = this[0];
  for (let i = 0; i < this.length - 1; i++) {this[i] = this[i + 1];
  }
  delete this[this.length - 1];
  this.length--;
  return firstElement;
};

// 示例应用
const myArray = [1, 2, 3];
console.log(myArray.myPush(4, 5));    // 输入:5
console.log(myArray);                  // 输入:[1, 2, 3, 4, 5]
console.log(myArray.myPop());        // 输入:5
console.log(myArray);                  // 输入:[1, 2, 3, 4]
console.log(myArray.myUnshift(0)); // 输入:5
console.log(myArray);                  // 输入:[0, 1, 2, 3, 4]
console.log(myArray.myShift());     // 输入:0
console.log(myArray);                  // 输入:[1, 2, 3, 4]

实现批改和拜访元素的办法

// 模仿实现 splice() 办法
Array.prototype.mySplice = function(startIndex, deleteCount, ...elements) {const removedElements = [];
  const len = this.length;
  const deleteEndIndex = Math.min(startIndex + deleteCount, len);
  const moveCount = len - deleteEndIndex;

  // 保留删除的元素
  for (let i = startIndex; i < deleteEndIndex; i++) {removedElements.push(this[i]);
  }

  // 挪动残余元素
  for (let i = 0; i < moveCount; i++) {this[startIndex + deleteCount + i] = this[startIndex + deleteCount + i + moveCount];
  }

  // 插入新元素
  for (let i = 0; i < elements.length; i++) {this[startIndex + i] = elements[i];
  }

  // 更新长度
  this.length = len - deleteCount + elements.length;

  return removedElements;
};

// 示例应用
const myArray = [1, 2, 3, 4, 5];
console.log(myArray.mySplice(2, 2, 'a', 'b')); // 输入:[3, 4]
console.log(myArray);                             // 输入:[1, 2, 'a', 'b', 5]

实现数组遍历的办法

// 模仿实现 forEach() 办法
Array.prototype.myForEach = function(callbackFn) {
  for (let i = 0;

 i < this.length; i++) {callbackFn(this[i], i, this);
  }
};

// 模仿实现 map() 办法
Array.prototype.myMap = function(callbackFn) {const mappedArray = [];
  for (let i = 0; i < this.length; i++) {mappedArray.push(callbackFn(this[i], i, this));
  }
  return mappedArray;
};

// 示例应用
const myArray = [1, 2, 3];
myArray.myForEach((value, index) => {console.log(`Element at index ${index} is ${value}`);
});

const doubledArray = myArray.myMap(value => value * 2);
console.log(doubledArray);  // 输入:[2, 4, 6]

实现数组转换和连贯的办法

// 模仿实现 toString() 办法
Array.prototype.myToString = function() {
  let result = '';
  for (let i = 0; i < this.length; i++) {if (i > 0) {result += ',';}
    result += this[i];
  }
  return result;
};

// 模仿实现 join() 办法
Array.prototype.myJoin = function(separator = ',') {
  let result = '';
  for (let i = 0; i < this.length; i++) {if (i > 0) {result += separator;}
    result += this[i];
  }
  return result;
};

// 示例应用
const myArray = [1, 2, 3];
console.log(myArray.myToString());      // 输入:'1, 2, 3'
console.log(myArray.myJoin('-'));       // 输入:'1-2-3'

实现数组排序和搜寻的办法

// 模仿实现 sort() 办法
Array.prototype.mySort = function(compareFn) {
  const length = this.length;
  for (let i = 0; i < length - 1; i++) {for (let j = 0; j < length - 1 - i; j++) {if (compareFn(this[j], this[j + 1]) > 0) {[this[j], this[j + 1]] = [this[j + 1], this[j]];
      }
    }
  }
  return this;
};

// 模仿实现 indexOf() 办法
Array.prototype.myIndexOf = function(searchElement, fromIndex = 0) {
  const length = this.length;
  for (let i = Math.max(fromIndex, 0); i < length; i++) {if (this[i] === searchElement) {return i;}
  }
  return -1;
};

// 示例应用
const myArray = [5, 2, 1, 4, 3];
console.log(myArray.mySort());        // 输入:[1, 2, 3, 4, 5]
console.log(myArray.myIndexOf(4));  // 输入:3

实现其余罕用办法

// 模仿实现 isArray() 办法
Array.myIsArray = function(obj) {return Object.prototype.toString.call(obj) === '[object Array]';
};

// 模仿实现 find() 办法
Array.prototype.myFind = function(callbackFn) {for (let i = 0; i < this.length; i++) {if (callbackFn(this[i], i, this)) {return this[i];
    }
  }
  return undefined;
};

// 示例应用
const myArray = [1, 2, 3, 4, 5];
console.log(Array.myIsArray(myArray));    // 输入:true
console.log(myArray.myFind(value => value > 3)); // 输入:4

以上是一些简略的模仿实现示例,用于帮忙了解数组办法的实现原理。

5. 数组的利用场景

数组作为一种常见的数据结构,在前端开发中有许多利用场景。以下是一些常见的利用场景:

  • 数据存储和治理 :数组可用于存储和治理数据汇合,如用户列表、商品列表等。能够通过数组的增删改查操作,对数据进行增删改查、排序和搜寻等操作。
  • 数据筛选和过滤 :应用数组的过滤办法(如 filter())能够不便地筛选和过滤数据,依据指定条件获取符合条件的数据子集。
  • 数据统计和计算 :通过数组的迭代办法(如 reduce())能够对数据进行统计和计算操作,如求和、平均值、最大值、最小值等。
  • 数据展现和渲染 :应用数组和模板引擎能够不便地进行数据的展现和渲染,如动静生成列表、表格等页面元素。

数组在前端开发中的利用十分宽泛,简直波及到数据的存储、解决和展现等方方面面。

6. 参考资料

  • MDN Web Docs – Array
  • JavaScript Arrays: Understanding the Basics
  • JavaScript Array Methods Every Developer Should Know
  • Understanding JavaScript Array Series

正文完
 0