let arr0 = [1, 2, 3];
let arr1 = new Array(1, 2, 3);
console.log(arr0, arr1);
let arr0 = [1, 2]; let arr1 = arr0; arr1.push(3) arr0 = [1, 3];//指向别的内存
let [a, b] = [1, 3];
let [, , , , a] = [1, 2, 3, 4, 5]; //a=5
[a, b] = [b, a];
let [name, age = 18, gender] = ['gl', , 'male'] let [name, age = 18] = ['gl']
let a = [1, 2, 3]; let b = [...a];
let [a, ...rest] = [1, 2, 3, 4, 5] //a=1 //rest=[2,3,4,5]
let a0 = [1, 2, 3] // 直接赋值;会彼此影响 let a1 = a0 a0.push(4) // 解构赋值:相当于重新赋值;不会彼此影响 let a2 = [...a0] a2.push(5) console.log(a0, a1, a2);
let obj0 = [{ id: 1, name: '张三' }, { id: 2, name: '李四' }, { id: 3, name: '王五' }]
console.log(obj0);
let obj1 = obj0
obj0.push({ id: 4, name: '赵六' })
let obj2 = [...obj0]
obj0.push({ id: 5, name: '老郭' })
obj2.push({ id: 5, name: '孙七' })
console.log(obj0, obj1, obj2);
console.log(typeof [1, 2]);//object console.log(Array.isArray([1, 2]));//true
| item | desc |
|---|---|
| push() | 添加元素到数组末尾 |
| unshift() | 添加元素到头部 |
| pop() | 移除数组末尾元素并返回 |
| shift() | 移除数组头部元素并返回 |
| concat() | 数组连接;返回一个新数组;不会修改原数组;不会去重 |
| join() | 数组元素按照指定的分隔符连接为字符串 |
| slice(start,end) |
Returns a copy of a section of an array.
取子串 - 选取串中位置|索引从 start 到 end 的部分;不包括 end
返回:一个新的数组/字符串
原数组:不变
start不指定,从0开始;end 不指定,截取到末尾
目标位置为负数时,反向截取;最后一位是-1;倒数第二位是-2,依次类推;可以用于获取后缀名;
|
| splice(start,count[,el...]) |
Removes elements from an array and, if necessary, inserts new elements in their place, returning the
deleted elements.
从原来数组中截取|删除指定长度的字符串
返回:删除的数据项
原数组:被修改
在删除的基础上,还可以插入新的元素el;如果 count 为0,则不删除
|
let arr0 = [1, 2, 3];
let arr1 = [3, 4, 5];
console.log(arr0.concat(arr1));//1, 2, 3, 3, 4, 5
console.log(arr0);//1, 2, 3
console.log(arr0.join('-'));//1-2-3
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let res = arr.slice(2, 4); console.log(res);//3,4 console.log(arr);//不变
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let res = arr.splice(2, 2); console.log(res);//[3,4] console.log(arr);//[1,2,5,6,7,8,9] arr.splice(2, 1, 8, 8); console.log(arr);//[1,2,8,8,6,7,8,9];5被删除,插入|增加了2个8
function shuffle(arr) {
let tmp = [];
while (arr.length > 0) {
let rad = Math.floor(Math.random() * arr.length)
tmp.push(arr[rad])
arr.splice(rad, 1)
}
return tmp;
}
| item | desc |
|---|---|
| forEach() |
返回:没有
对数组中的每一项执行给定函数。本质上与使用 for 循环迭代数组一样
原数组:不会被修改;仅仅使用数据
无法中断
|
| map() |
对数组中的每一项执行给定函数,返回每次函数调用的结果组成的数组
适合创建包含的项与另一个数组一一对应的数组 - 映射
返回:新数组
原数组:不会被修改
|
| every() |
对数组中的每一项执行给定函数;如果该函数对 每一项 都返回 true,则返回 true
返回:布尔值
原数组:不会被修改
|
| some() |
对数组中的每一项执行给定函数;如果该函数 有一项 返回 true,则返回 true
返回类型:布尔值
原数组:不会被修改
|
| filter() |
对数组中的每一项执行给定函数,返回执行结果为 true 的项组成的数组 - calls the predicate function one time for each element in the
array
返回:符合条件的新数组
原数组:不会被修改
|
| find() |
查找满足提供的测试函数的 第一个 数据项
返回:查找到的数据项;若没有则返回 undefined
原数组:不会被修改
如果有,则立即返回;不会再继续测试后面的数据项
|
| findIndex() |
返回数组中满足提供的测试函数的 第一个 元素的索引
返回:查找到的数据项的索引;若没有找到对应元素则返回 -1
原数组:不会被修改
如果有,则立即返回;不会再继续测试后面的数据项
|
let data = [{ id: 10, name: 'gl' }, { id: 11, name: 'cq' }, { id: 12, name: 'sz' }]
let res = data.map(item => item.name)
let res = data.map(item => ({name: item.name, desc:item.desc}))
data.map(item => item.name = item.name.toUpperCase())
data.map(item => item.num = 1)
let data = ['gl', 'cq', 'sz', 'sh', 'gz']
let res = data.map((item, ind) => ({ id: ind, location: item }))
fetch('/utils/data/message.json')
.then(res => res.json())
.then(res => {
console.log(res);
let json = res.cont.map(item => `checkAll = options.every(item => item.check)
let arr = [0, 1, 2, 3, 4, 5] let flag = arr.some(item => item > 5) console.log(flag); // false
let obj = [{ id: 10, name: 'gl' }, { id: 11, name: 'cq' }, { id: 12, name: 'sz' }]
let flag = obj.some(item => item.name == 'sz')
console.log(flag); // true
goods.filter(item => item.name.includes(keyword))
let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] let res = arr.filter(item => item % 2 === 0)
let data = [{ id: 10, name: 'gl' }, { id: 11, name: 'cq' }, { id: 12, name: 'sz' }]
let res = data.filter(item => item.id != 11)
function delItem(dataItem) {
data = data.filter(item => item.id != dataItem.id)
}
let obj = [{ id: 10, name: 'gl' }, { id: 11, name: 'cq' }, { id: 12, name: 'sz' }]
let res = obj.find(item => item.id === 11)
console.log(res); // { id: 11, name: 'cq' }
const existingItem = cart.find(item => item.id === product.id)
if (existingItem) {
existingItem.quantity++
} else {
cart.push({ ...product, quantity: 1 })
}
| item | desc |
|---|---|
| reduce() | reduce()方法从数组的第一项开始,逐个遍历到最后 |
| reduceRight() | 从数组的最后一项开始,向前遍历到第一项 |
let sum = arr.reduce((pre, cur, index, array) => {
return pre + cur;
})
let sum = goods.reduce((total, item) => {
return total + item.price + item.quantity;
}, 0)
| item | desc |
|---|---|
| sort() |
不指定比较函数
默认根据数据项 UTF-16 编码升序比较 - The default sort order is ascending
|
| sort(compareFn) | 指定比较函数 - 按照参数进行排序 |
const arr = [1,45,6,2,4,5] //升序 arr.sort(); //[1, 2, 4, 45, 5, 6] //降序 arr.sort().reverse(); //[6, 5, 45, 4, 2, 1]
const arr = ['banana', 'apple', 'cherry']; arr.sort(); // ['apple', 'banana', 'cherry']
arr = [1,45,6,2,4,5] //升序 arr.sort((a, b) => a - b); //[1, 2, 4, 5, 6, 45] //降序 arr.sort((a, b) => b - a); //[45, 6, 5, 4, 2, 1]
//升序 obj.sort((a, b) => a['age'] - b['age']); //降序 obj.sort((a, b) => b['age'] - a['age']);
const sortUp = (key) => {
arr.sort((a, b) => {
return a[key] - b[key]
})
}
const sortDown = (key) => {
arr.sort((a, b) => {
return b[key] - a[key]
})
}
obj.sort((a, b) => {
return a.name.localeCompare(b.name)
})
obj.sort((a, b) => {
return b.name.localeCompare(a.name)
})