JS 常用数组方法(一)

一、new Map()

const m = new Map([

  ["小明", 100],

  ["小红", 90],

  ["小兰", 99]

]);


m.size; // 3

m.set("小明", 100).set("小红", 100);// [["小明", 100], ["小红", 100]]

m.get("小红"); // 100

m.has("小明"); // true

m.delete("小明")

m.clear(); // null

* 选择 Object 还是 Map

对于多数 Web 开发任务来说,选择 Object 还是 Map 只是个人偏好问题,影响不大。不过,对于在乎内存和性能的开发者来说,对象和映射之间确实存在显著的差别。

(1)内存占用

Object 和 Map 的工程级实现在不同浏览器间存在明显差异,但存储单个键 / 值对所占用的内存数量都会随键的数量线性增加。批量添加或删除键 / 值对则取决于各浏览器对该类型内存分配的工程实现。不同浏览器的情况不同,但给定固定大小的内存,Map 大约可以比 Object 多存储 50 % 的键 / 值对。

(2)插入性能

向 Object 和 Map 中插入新键 / 值对的消耗大致相当,不过插入 Map 在所有浏览器中一般会稍微快一点儿。对这两个类型来说,插入速度并不会随着键 / 值对数量而线性增加。如果代码涉及大量插入操作,那么显然 Map 的性能更佳。

(3)查找速度

与插入不同,从大型 Object 和 Map 中查找键 / 值对的性能差异极小,但如果只包含少量键 / 值对,则 Object 有时候速度更快。在把 Object 当成数组使用的情况下(比如使用连续整数作为属性),浏览器引擎可以进行优化,在内存中使用更高效的布局。这对 Map 来说是不可能的。对这两个类型而言,查找速度不会随着键 / 值对数量增加而线性增加。如果代码涉及大量查找操作,那么某些情况下可能选择 Object 更好一些。

(4)删除性能

使用 delete 删除 Object 属性的性能一直以来饱受诟病,目前在很多浏览器中仍然如此。为此,出现了一些伪删除对象属性的操作,包括把属性值设置为 undefined 或 null。对大多数浏览器引擎来说,Map 的 delete ()操作都比插入和查找更快。如果代码涉及大量删除操作,那么毫无疑问应该选择 Map。

二、JS 数组对象过滤——filter, find, some, every

(y)filter() \find()

let arr1 = [1, 2, 3, 4]

let arr2 = arr1.filter(item => item === 1)

console.log(arr2,) // [1]

  (2)some()

用于检测数组中的元素是否满足指定条件,会依次执行数组的每个元素,如果有一个元素满足条件,则表达式返回true, 剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false

let someArr1 = [1, 2, 3, 4]

let someArr2 = someArr1.some(item => item === 1)

console.log(someArr2, 'someArr1') // true  someArr1

  (3)every()

方法用于检测数组所有元素是否都符合指定条件

  (4)map()

对数组中的每个元素进行计算, 得到一个新数组

var newArray3 = [1, 2, 3, 4]

newArray3 = numArr.map(item => {

  item = item + 1;

  return item;

});

//newArray3 =  [2, 3, 4, 5]

三、(...)延展

let arr1 = [1, 2, 3]

let arr2 = [4, 5, 6]

let a = [...arr1, ...arr2]

console.log(a);//[1,2,3,4,5,6]

console.log(...arr1);//1 2 3

四、reduce()

参数:

  prev 必需。累计器累计回调的返回值; 表示上一次调用回调时的返回值,或者初始值 init;

  cur 必需。表示当前正在处理的数组元素;

  index 可选。表示当前正在处理的数组元素的索引,若提供 init 值,则起始索引为 - 0,否则起始索引为1;

  arr 可选。表示原数组;

  init 可选。表示初始值。

例子:求和

let arr = [1,2,3]

let sum = arr.reduce(function (prev, cur, index, arr) {

  return prev + cur

}, init);

console.log(sum);//6

五、new Set() 去重

元素操作 .add(),.delete(),.has(),.clear(),.size

// init

let s = new Set()



// .add()

s.add(1).add(2).add(2) // => Set(2) {1, 2}



// .size

s.size // => 2



// .has()

s.has(1) // => true

s.has(2) // => true

s.has(3) // => false



// .delete()

s.delete(2); // => true

s.has(2) // => false

例子:

let arr = [1,2,3,1]

let list = new Set(arr)

console.log(list);//{1,2,3}

//转为数组

let a = [...list]//[1,2,3]

let b = Array.from(list)//[1,2,3]

(待续)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值