array 常用语句
操作数组
- arr.splice() 返回被删除的元素 会改变原数组
可添加、删除、和插入元素 arr.splice(start[, deleteCount, elem1, ..., elemN])
-
arr.slice([start],[end]) 返回一个新数组 不会改变原数组
-
arr.concat(arg1,arg2...) 返回一个新数组 不会改变原数组
{
let arr = ["I", "study", "JavaScript", "right", "now"]; // 删除前两个元素
let removed = arr.splice(0, 2); alert( removed ); // "I", "study" <-- 被从数组中删除了的元素
}
遍历
- arr.forEach((item,index,array)=>{})
无返回值 无法中止或跳出循环(可以先filter后在forEach)
转换数组
- arr.map((item,index,array)=>{})
返回结果数组 return 可以跳过循环 (当需要遍历数组并返回每个与元素的数据时)
const arr = [1, 2, 3, 4, 5]
const arr2 = arr.map((item, index) => {
if (item === 3) return
console.log(arr[index])
return item
})
- arr.sort
返回排序后的数组
let arr = [ 1, 23, 15 ];
arr.sort( (a, b) => a - b );
- arr.reduce 根据数组计算单个值
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current, 0);
alert(result); // 15
- string.split <-> [].join
"1,2,3".split(",") // ['1', '2', '3']
['1', '2', '3'].join(",") // '1,2,3'
在数组中搜索
- indexOf/includes
indexOf 返回找到元素的索引 ,没找到返回-1 includes 返回boolean
let arr = [1, 0, false];
console.log( arr.indexOf(null) ); // -1
console.log( arr.includes(1) ); // true
- find/findIndex
find 返回找到的元素 没找到返回undefined find 返回找到的元素索引 没找到返回-1
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
let user = users.find(item => item.id == 1);
alert(user.name); // John
- arr.filter((item,index,array)=>{})
返回通过测试的数组 return 可以跳过循环
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
// 返回前两个用户的数组
let someUsers = users.filter(item => item.id < 3);
console.log(someUsers.length); // 2
其他
- Array.isArray(value) 检查 value 是否是一个数组
alert(Array.isArray({})); // false
alert(Array.isArray([])); // true
- 创建键值对
let users = [
{id: 'john', name: "John Smith", age: 20},
{id: 'ann', name: "Ann Smith", age: 24},
{id: 'pete', name: "Pete Peterson", age: 31},
];
let usersById = groupById(users);
/*
// 调用函数后,我们应该得到:
usersById = {
john: {id: 'john', name: "John Smith", age: 20},
ann: {id: 'ann', name: "Ann Smith", age: 24},
pete: {id: 'pete', name: "Pete Peterson", age: 31},
}
*/
function groupById(array) {
return array.reduce((obj, value) => {
obj[value.id] = value;
return obj;
}, {})
}
扩展运算符的应用
-
数组去重
let arr = [1,2,3,4,4,2,3] let unique = Array.from(new Set(arr)) // [1, 2, 3, 4]
Map和Object
| - | Map | Object |
|---|---|---|
| key类型 | 任意值,包含函数对象等 | 必须是String 或 Symbol |
| 意外的键 | 只包含set的键 | 有原型上的键 |
| 迭代 | 可迭代 | 没有实现迭代,for...of会报错(for...in可以迭代一个对象的可枚举属性。Object.keys也可迭代对象) |
| Size | size属性获取个数 | 只能手动计算 |
Map实例方法
| Map方法 | 返回 |
|---|---|
| set | 设定key值 |
| get | 获取key对应的值,没有返回undefined |
| has | 返回boolean |
| clear | 删除所有键值对 |
| values | 返回所有键的值,保持插入顺序 |
| keys | 返回所有键,保持插入顺序 |
Set可以存储任意类型的唯一值
Set实例方法
| Set方法 | 返回 |
|---|---|
| add | 添加元素 |
| has | 返回boolean |
| delete | 删除指定值 |
| clear | 删除所有键值对 |
| values | 返回所有键的值,保持插入顺序 |
| keys | 返回所有键,保持插入顺序 |