JavaScript数组、对象处理方法
一、数组处理
1. 数组深层复制
const finalArr = [];
finaArr = checkArr;
数组是一种引用数据类型,直接给对象赋值,是引用赋值,引用的是内存里的地址,两个数组指向的是同一个内存地址,会同时改变。
解决方法:
(1)解构赋值,解构出来的是一个新的数组,不会指向原来的地址
finalArr = [...checkArr]; (2) 数组深层拷贝
实现对象的深拷贝(利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象)
let b = JSON.parse(JSON.stringify(a))
2、数组比较
- 两个数组永远不相等,数组是引用地址,要判断两个数组相等
arr1.toString() == arr2.toString()
JSON.stringify(arr1) == JSON.stringify(arr2)
3. includes 方法
(1)多个并行的判断条件,可以用includes函数,简化代码逻辑
if (["今日实时", "汇总统计", "下载汇总报表"].includes(subItem.name)) {
item.children.splice(subIndex, 1);
}
4. 去除数组中的相同元素
indexOf只返回元素在数组中第一次出现的位置,如果与元素位置不一致,说明该元素在前面已经出现过,是重复元素,会被filter过滤掉
const editPlainOptions = arr.filter((e, index, item) =>
return item.indexOf(e) === index;
});
5. 数组排序 - sort 函数
1. 字母开头默认按升序排序,不需要出入参数
['a','c', 'b' ].sort(); // a,b,c
2. 使用数字排序,你必须通过一个函数作为参数来调用
(1)arr.sort(), 如果排序函数返回值是大于0 的数,sort函数将数组降叙排序
(2)rr.sort(), 如果排序函数返回值是小于0 的数,sort函数将数组升序排序
[1,23,4 ].sort(function(a, b) {
return a - b; // 第一项 减去第二项,如果小于 0,就将第一项放到前面,升序排序(a - b)
[1,23,4 ].sort(function(a, b) {
return b - a; // 第二项 减去第一项,如果小于 0,就将第二项放到前面,降序排序(b - a)
})
6.map函数和forEach
- 在使用map函数时多层map循环需要多层return
2. foreach和map函数的区别 -- map函数有返回值,forEach函数没有
3. 在forEach函数或者map函数中, return 跳出整个函数,和层级结构没有关系
二、对象处理
1. 批量处理对象里的数据
for(key in value ) { if(!value[key]) { delete value[key] } }
2. 对象比较
equals和==的区别
(1) equals检测两个对象是否相等
(2)== 比较基本数据类型和比较引用类型
3. 获取对象的属性值不为空的属性的个数
getNumber(obj) {
let count = 0;
for(var i in obj) {
if(obj.hasOwnProperty(i) && obj[i] != '') {
count ++;
return count;
}
4. 给对象赋动态的属性值
obj[type] = value;
5. object.assgin
object.assgin({}, obj ,arr ) => 合成一个对象 ,越是后面的参数占比越高,后面的对象的属性值会覆盖前面的同名的属性值
6. 排序问题
1. map数据和object对象的排序问题
Map实例对象的key值可以为一个数组或者一个对象,或者一个函数,比较随意,而且 Map对象实例中数据的排序是根据用户push的顺序进行排序的,而Object实例中key,value的顺序则有些规律(它们会先排数字开头的值,然后才是字符串开头的key值);
7. 判断一个Map数据为空
首先设置一个标志位,并将值设置为true,然后循环遍历这个map,如果进入循环,则说明map非空,在循环中把标志位设置为false,具体代码如下
dealData = (data) => {
let isEmpty = true;
for (const name in data) { //name是自定义得一个变量,与data中本身得数据无关
isEmpty = false;
if (!isEmpty) {
// 解析map数据
const list = [];
const finalList = [];
for (var i in data) {
const obj = {};
obj.dt = i;
for (var key in data[i]) { //map key
obj.itemList = data[i];