js高级程序设计阅读第六章

93 阅读3分钟

Array.from()对现有数组执行浅复制

const a1 = [1, 2, 3, 4]; 
const a2 = Array.from(a1); 

第三个参数重写当前from的this对象

const a1 = [1, 2, 3, 4]; 
const a2 = Array.from(a1, x => x**2); 
const a3 = Array.from(a1, function(x) {return x**this.exponent}, {exponent: 2}); 
console.log(a2); // [1, 4, 9, 16] 
console.log(a3); // [1, 4, 9, 16]

Array.of()可以把一组参数转换为数组。这个方法用于替代在 ES6之前常用的 Array.prototype.

slice.call(arguments),一种异常笨拙的将 arguments 对象转换为数组的写法:
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4] 
console.log(Array.of(undefined)); // [undefined] 

修改数组长度 改少删除 改多会增加undefined

let colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
colors.length = 2; 
alert(colors[2]); // undefined 

判断是否为数组

v instanceof Array
Array.isArray(v)

替换数组值
arr.fill(替换的值:any,start:num,end:num)

copyWithin没看太懂

push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度。pop()方法则 用于删除数组的最后一项,同时减少数组的 length 值,返回被删除的项。

改变原数组

arr.splice()
let colors = ["red", "green", "blue"]; 
let removed = colors.splice(0,1); // 删除第一项
alert(colors); // green,blue 
alert(removed); // red,只有一个元素的数组
removed = colors.splice(1, 0, "yellow", "orange"); // 在位置 1 插入两个元素
alert(colors); // green,yellow,orange,blue 
alert(removed); // 空数组
removed = colors.splice(1, 1, "red", "purple"); // 插入两个值,删除一个元素
alert(colors); // green,red,purple,orange,blue 
alert(removed); // yellow,只有一个元素的数组


indexOf()
includes()
lastIndexOf()


返回匹配的元素或下标
找到匹配项后,这两个方法都不再继续搜索  
find()
findIndex()
const people = [  {  name: "Matt",  age: 27  },  {  name: "Nicholas",  age: 29  } ];
people.find((item,index,arr)=>item.age>28)


every()
some()
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1]; 
let everyResult = numbers.every((item, index, array) => item > 2); 
alert(everyResult); // false 
let someResult = numbers.some((item, index, array) => item > 2); 
alert(someResult); // true

filter()
map()
forEach() 没有返回值

如果没有写第二初始值 索引会从1开始 其实是第一次的时候就隐式调用了pre+cur,
你可以理解为是在背后做了pre是0+cur:1reduce(fn,初始值)
reduceRight() 从数组右边开始执行reduce

Map

Map 可以使用任何 JavaScript 数据类型作为键。

const m1 = new Map([ 
 ["key1", "val1"], 
 ["key2", "val2"], 
 ["key3", "val3"] 
]); 
alert(m1.size); // 3

has() set() get() delete() clear() size属性

const m = new Map(); 
alert(m.has("firstName")); // false 
alert(m.get("firstName")); // undefined 
alert(m.size); // 0 
m.set("firstName", "Matt") 
 .set("lastName", "Frisbie"); 
alert(m.has("firstName")); // true 
alert(m.get("firstName")); // Matt 
alert(m.size); // 2 
m.delete("firstName"); // 只删除这一个键/值对
alert(m.has("firstName")); // false 
alert(m.has("lastName")); // true 
alert(m.size); // 1 
m.clear(); // 清除这个映射实例中的所有键/值对
alert(m.has("firstName")); // false 
alert(m.has("lastName")); // false 
alert(m.size); // 0 


可以通过m.entries()进行迭代

WeakMap 弱映射

Set 集合

// 使用数组初始化集合 
const s1 = new Set(["val1", "val2", "val3"]); 
alert(s1.size); // 3 
初始化之后,可以使用 add()增加值,使用 has()查询,通过 size 取得元素数量,以及使用 delete()
和 clear()删除元素

add()返回集合的实例,所以可以将多个添加操作连缀起来,包括初始化:
const s = new Set().add("val1"); 
s.add("val2").add("val3"); 
alert(s.size); // 3 

#weakset 弱集合