1、创建空数组 & new Array( ... )
const arr = new Array(5);
console.log(arr);
console.log(arr.length);
const arr = new Array("a", "b", "c");
console.log(arr);
console.log(arr.length);
2、创建数组 & of、from
Array.of(7);
Array.of(1, 2, 3);
new Array(7);
new Array(1, 2, 3);
Array.from('foo');
const set = new Set(['foo', 'bar', 'baz', 'foo']);
Array.from(set);
const map = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(map);
function f() {
return Array.from(arguments);
}
f(1, 2, 3);
3、判断数据 & isArray
Array.isArray([1, 2, 3]);
Array.isArray({ foo: 123 });
Array.isArray("foobar");
Array.isArray(undefined);
4、遍历 & forEach、map、reduce、filter、every、some
var numbers = [1, 4, 9];
var doubles = numbers.map(function (num) {
return num * 2;
});
- 参数一:callback
- accumulator:累计器累计回调的返回值;
- currentValue:数组中正在处理的元素
- index:数组中正在处理的当前元素的索引
- array:调用reduce()的数组
- 参数二:initialValue
- 作为第一次调用 callback函数时的第一个参数的值
- 如果没有提供初始值,则将使用数组中的第一个元素
const words = ["spray", "limit", "exuberant"];
const result = words.filter((word) => word.length > 6);
console.log(result);
[12, 5, 8, 130, 44].every((x) => x >= 10);
[12, 54, 18, 130, 44].every((x) => x >= 10);
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10);
[12, 5, 8, 1, 4].some(isBiggerThan10);
5、查找 & includes、indexOf、find(可稀疏)、findIndex(可稀疏)
- 判断一个数组是否包含一个指定的值
- 包含则返回 true,否则返回false
const pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
console.log(pets.includes('at'));
- 数组中可以找到一个给定元素的第一个索引
- 不存在,则返回-1
var array = [2, 5, 9];
array.indexOf(2);
array.indexOf(7);
array.indexOf(9, 2);
array.indexOf(2, -1);
array.indexOf(2, -3);
- 返回数组中 满足条件的第一个元素的值
- 否则返回 undefined
const array1 = [5, 12, 8, 130, 44];
const found = array1.find((element) => element > 10);
console.log(found);
- 返回数组中 满足条件第一个元素的索引
- 若没有找到对应元素则返回-1
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
6、改原数组 & 7 + copyWithin、fill(可稀疏)
const array1 = ["one", "two", "three"];
const reversed = array1.reverse();
console.log("array1:", array1);
console.log("reversed:", reversed);
const months = ["March", "Jan", "Feb", "Dec"];
months.sort();
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
const months = ["Jan", "March", "April", "June"];
months.splice(1, 0, "Feb");
console.log(months);
months.splice(4, 1, "May");
console.log(months);
const array1 = ["a", "b", "c", "d", "e"];
array1.copyWithin(0, 3, 4);
console.log(array1);
const array1 = [1, 2, 3, 4];
array1.fill(0, 2, 4);
console.log(array1);
7、其他方法 & slice、concat、join
const animals = ["ant", "bison", "camel", "duck", "elephant"];
animals.slice(2);
var alpha = ["a", "b", "c"];
var numeric = [1, 2, 3];
let newArr = alpha.concat(numeric);
var alpha = ["a", "b", "c"];
var alphaNumeric = alpha.concat(1, [2, 3]);
console.log(alphaNumeric);
var num1 = [[1]];
var num2 = [2, [3]];
var num3 = [5, [6]];
var nums = num1.concat(num2);
console.log(nums);
var nums2 = num1.concat(4, num3);
console.log(nums2);
const elements = ["Fire", "Air", "Water"];
console.log(elements.join());
console.log(elements.join(""));
console.log(elements.join("-"));
8、常用方法的源码实现
Array.prototype.myForeEach = function (cb) {
var _arr = this;
var _len = _arr.length;
var _arg2 = arguments[1] || window;
for (var i = 0; i < _len; i++) {
cb.apply(_arg2, [_arr[i], i, _arr]);
}
};
Array.prototype.myMap = function (cb) {
var _arr = this;
var _len = _arr.length;
var _arg2 = arguments[1] || window;
var _newArr = [];
var _item;
for (var i = 0; i < _len; i++) {
_item = deepClone(_arr[i]);
_newArr.push(cb.apply(_arg2, [_item, i, _arr]));
}
return _newArr;
};
Array.prototype.myReduce = function (cb, initialValue) {
var _arr = this;
var _len = _arr.length;
var _arg3 = arguments[2] || window;
var _item;
for (var i = 0; i < _len; i++) {
_item = deepClone(_arr[i]);
initialValue = cb.apply(_arg3, [initialValue, _item, i, _arr]);
}
return initialValue;
};
Array.prototype.myFilter = function (cb) {
var _arr = this;
var _len = _arr.length;
var _arg2 = arguments[1] || window;
var _newArr = [];
var _item;
for (var i = 0; i < _len; i++) {
_item = deepClone(_arr[i]);
cb.apply(_arg2, [_item, i, _arr]) && _newArr.push(_item);
}
return _newArr;
};
Array.prototype.myEvery = function (cb) {
var _arr = this;
var _len = _arr.length;
var _arg2 = arguments[1] || window;
var _res = true;
for (var i = 0; i < _len; i++) {
if (!cb.apply(_arg2, [_arr[i], i, _arr])) {
_res = false;
break;
}
}
return _res;
};
Array.prototype.mySome = function (cb) {
var _arr = this;
var _len = _arr.length;
var _arg2 = arguments[1] || window;
var _res = false;
for (var i = 0; i < _len; i++) {
if (cb.apply(_arg2, [_arr[i], i, _arr])) {
_res = true;
break;
}
}
return _res;
};
Array.prototype.myReduceRight = function (cb, initialValue) {
var _arr = this;
var _len = _arr.length;
var _arg3 = arguments[2] || window;
var _item;
for (var i = _len - 1; i >= 0; i--) {
_item = deepClone(_arr[i]);
initialValue = cb.apply(_arg3, [initialValue, _item, i, _arr]);
}
return initialValue;
};