JavaScript - 数组

Telentjsjs算法大约 4 分钟

JavaScript - 数组

创建和初始化数组

let arr1 = new Array();
let arr2 = new Array(7);
let arr3 = new Array(1, 2, 3, 4, 5, 6, 7);
let arr4 = [];
let arr5 = [1, 2, 3, 4, 5, 6, 7];

访问元素和迭代数组

for (let i = 0; i < arr.length; i += 1) {
  console.log(arr[i]);
}

添加元素

在数组末尾插入元素

// 通过索引
arr[arr.length] = 1;
// 通过push
arr.push(1);

在数组开头插入元素

// 原型链实现
Array.prototype.insertFirstPosition = function (value) {
  for (let i = this.length; i > 0; i -= 1) {
    this[i] = this[i - 1];
  }
  this[0] = value;
};
arr.insertFirstPosition(1);
// unshift
arr.unshift(1);

删除元素

从数组末尾删除元素

// pop
arr.pop();

从数组开头删除元素

// 通过索引,但数组长度未发生变化
for (let i = 0; i < arr.length; i += 1) {
  arr[i] = arr[i + 1];
}
// 原型链方法
Array.prototype.reIndex = function (myArray) {
  const newArray = [];
  for (let i = 0; i < myArray.length; i += 1) {
    if (myArray[i] !== undefined) {
      newArray.push(myArray[i]);
    }
  }
  return newArray;
};
Array.prototype.removeFirstPosition = function () {
  for (let i = 0; i < this.length; i += 1) {
    this[i] = this[i + 1];
  }
  return this.reIndex(this);
};
arr = arr.removeFirstPosition();
// shift
arr.shift();

在任意位置添加或删除元素

// 删除索引5开始的3个元素
arr.splice(5, 3);
// 将2、3、4插入数组
arr.splice(5, 0, 2, 3, 4);
// 替换元素
arr.splice(5, 3, 2, 3, 4);

JavaScript 的数组方法参考

方法描述
concat连接两个或更多的数组,并返回结果
every对数组中的每个元素运行给定函数,如果该函数每个元素都返回 true,则返回 true
filter对数组中的每个元素运行给定函数, 返回该函数会返回 true 的元素组成的数组
forEach对数组中的每个元素运行给定函数,没有返回值
join将所有的数组元素连接成一个字符串
indexOf返回第一个与给定参数相等的数组元素的索引,没有找到返回 -1
lastIndexOf返回在数组中搜索到的与给定参数相等的元素的索引里最大的值
map对数组中的每个元素运行给定函数,返回每次函数调用的结果组成的数组
reverse颠倒数组
slice传入索引值,将数组里对应索引范围内的元素作为新数组返回
some对数组中的每个元素运行给定函数,如果任一元素返回 true, 则返回 true
sort按照字母顺序对数组排序,支持传入指定排序方法的函数作为参数
toString将数组作为字符串返回
valueOf将数组作为字符串返回

数组合并

const a = 0;
const b = [1, 2, 3];
const c = [-1, -2, -3];
const arr = c.concat(a, b); // -3, -2, -1, 0, 1, 2, 3

迭代器函数

const isEven = (x) => x % 2 === 0;

// 各个迭代器之间的返回值不一致
// every
arr.every(isEven);
// some
arr.some(isEven);
// forEach
arr.forEach(isEven);
// map
arr.map(isEven);
// filter
arr.filter(isEven);
// reduce
arr.reduce((previous, current) => previous + current);

ES6 和数组的新功能

方法描述
@@iterator返回一个包含数组键值对的迭代器对象,可以通过同步调用得到数组元素的键值对
copyWithin复制数组中一系列元素到同一数组指定的起始位置
entries返回包含数组所有键值对的 @@iterator
includes如果数组中存在某个元素则返回 true,否则返回 false
find根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素
findIndex根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素在数组中的索引
fill用静态值填充数组
from根据已有的数组创建一个新的数组
keys返回包含数组所有索引的 @@iterator
of根据传入的参数创建一个新数组
values返回包含数组所有值的 @@iterator
// for...of
for (const item of arr) {
  console.log(item);
}
// @@iterator
let iterator = arr[Symbol.iterator]();
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value); // 若迭代结束,会返回 undefined
// entries、keys、values
let aEntries = arr.entries();
console.log(aEntries.next().value);
console.log(aEntries.next().value);
console.log(aEntries.next().value); // 若迭代结束,会返回 undefine

const aKeys = arr.keys();
console.log(aKeys.next().value);
console.log(aKeys.next().value);
console.log(aKeys.next().value); // 若迭代结束,会返回 undefine

const aValues = arr.values();
console.log(aValues.next().value);
console.log(aValues.next().value);
console.log(aValues.next().value); // 若迭代结束,会返回 undefine
// form
const arr1 = Array.from(arr);
const evens = Array.from(arr, (x) => x % 2 === 0); // 增加过滤值的函数
// Array.of
const arr1 = Array.of(1); // [1]
const arr2 = Array.of(1, 2, 3, 4); // [1,2,3,4]
// fill
const arr = new Array(6);
arr.fill(0); // [0, 0, 0, 0, 0, 0]
arr.fill(2, 1); // [0, 2, 2, 2, 2, 2]
arr.fill(1, 3, 5); // [0, 0, 0, 1, 1, 0]
// copyWithin
const arr = [1, 2, 3, 4, 5, 6];
arr.copyWithin(0, 3); // [4, 5, 6, 4, 5, 6]
arr.copyWithin(1, 3, 5); // [1, 4, 5, 4, 5, 6]

排序元素

// 升序
arr.sort((a, b) => {
  if (a < b) {
    return -1;
  } else if (a > b) {
    return 1;
  }
  return 0;
});
// 降序
arr.sort((a, b) => {
  if (a > b) {
    return -1;
  } else if (a < b) {
    return 1;
  }
  return 0;
});

搜索

// find 和 findIndex
arr.find((x) => x === 1); // 返回对应的元素
arr.findIndex((x) => x === 1); // 返回对应的元素索引
// includes
arr.includes(1); // 存在则返回 true,否则 false

输出为字符串

arr.toString();
arr.join(",");
上次编辑于:
贡献者: 张振阳