数组方法(自用)

78 阅读2分钟

array 常用语句

操作数组

  1. arr.splice() 返回被删除的元素 会改变原数组

可添加、删除、和插入元素 arr.splice(start[, deleteCount, elem1, ..., elemN])

  1. arr.slice([start],[end]) 返回一个新数组 不会改变原数组

  2. arr.concat(arg1,arg2...) 返回一个新数组 不会改变原数组

	{
	let arr = ["I", "study", "JavaScript", "right", "now"]; // 删除前两个元素 
	let removed = arr.splice(0, 2); alert( removed ); // "I", "study" <-- 被从数组中删除了的元素 
	}

遍历

  1. arr.forEach((item,index,array)=>{})

无返回值 无法中止或跳出循环(可以先filter后在forEach)

转换数组

  1. 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
    })
  1. arr.sort

返回排序后的数组


let arr = [ 1, 23, 15 ];
arr.sort( (a, b) => a - b );

  1. arr.reduce 根据数组计算单个值
let arr = [1, 2, 3, 4, 5];

let result = arr.reduce((sum, current) => sum + current, 0);

alert(result); // 15
  1. string.split <-> [].join

"1,2,3".split(",") //  ['1', '2', '3']
['1', '2', '3'].join(",") // '1,2,3'

在数组中搜索

  1. indexOf/includes

indexOf 返回找到元素的索引 ,没找到返回-1 includes 返回boolean



let arr = [1, 0, false];

console.log( arr.indexOf(null) ); // -1
console.log( arr.includes(1) ); // true

  1. 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
  1. 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

其他

  1. Array.isArray(value) 检查 value 是否是一个数组
alert(Array.isArray({})); // false
alert(Array.isArray([])); // true
  1. 创建键值对
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;
  }, {})
}

扩展运算符的应用

  1. 数组去重

    let arr = [1,2,3,4,4,2,3]
    let unique = Array.from(new Set(arr)) // [1, 2, 3, 4]
    
    

Map和Object

-MapObject
key类型任意值,包含函数对象等必须是String 或 Symbol
意外的键只包含set的键有原型上的键
迭代可迭代没有实现迭代,for...of会报错(for...in可以迭代一个对象的可枚举属性。Object.keys也可迭代对象)
Sizesize属性获取个数只能手动计算

Map实例方法

Map方法返回
set设定key值
get获取key对应的值,没有返回undefined
has返回boolean
clear删除所有键值对
values返回所有键的值,保持插入顺序
keys返回所有键,保持插入顺序

Set可以存储任意类型的唯一值

Set实例方法

Set方法返回
add添加元素
has返回boolean
delete删除指定值
clear删除所有键值对
values返回所有键的值,保持插入顺序
keys返回所有键,保持插入顺序