4.对数组操作的常见场景

147 阅读2分钟

arr1 = [{name: 'wang', city: '上海', id: 1}, {name: 'lin', city: '杭州', id: 7}]
arr2 = [
        {name: 'wang', city: '上海', id: 1},
         {name: 'lin', city: '杭州', id: 7}, 
           {name: 'chen', city: '深圳', id: 9}
]

1.双层for循环 + flag变量 新数组更新就数组元素

  • 定义变量  flag 
  • 双层for循环通过变量判断是否已经存在改元素对象 
  • 大数组放在外层

let newArr = []
for(let i = 0; i < arr2.length; i++) {
    let flag = false
    for (let j = 0; j < arr1.length, j++) {
        if (arr2[i].id == arr1[j].id){
            arr2[i] = arr1[j]
            flag = true
        }
    }
    if (!flag) {
        newArrr.push(arr2[i])
    }
}

应用场景 接口返回数组 更新原始数组

for(let j = 0; j < res.length; j ++) {
    let flag = false
    for (let i = 0; i < that.textArray.length; i++) {
        if (that.textArray[i].id == res[j].id) {
            that.textArray.splice(i, 1, res[j])
            flag = true
        }
    }
    if (!flag) {
        that.textArray.push(res[j])
    }
}


2.匹配数组中的id,修改数组属性值

临时数组, 其中一个数组属性值作为临时数组的key值
let obj = [] //临时数组
for (let i = 0; i < arr2.length; i++) {
    obj[arr2[i].id] = true
}
 for (let j = 0; j < arr1.length, j++) {
    if (obj[arr1[j].id]) {
        arr1[j] = {}   
    }
}

应用场景 已知一个id数组,去查找arr数组中对应的id, 修改元素

let obj = [] //临时数组
for (let i = 0; i < arr2.length; i++) {
    if (obj[arr[2]]) {}
    obj.push(arr2[i])
    obj[arr2[i].id] = true
}
 for (let j = 0; j < arr1.length, j++) {
    if (obj[arr1[j].id]) {
        arr1[j].sex = 'women'   
    }
}

3.数组去重

采用对象访问属性的方法,判断属性值是否存在

  • 两个临时数组 newArr, obj
  • for循环 数组对象push新数组  同时数组对象id属性值作为临时数组的key, 值为true

    	//  利用对象访问属性的方法,判断对象中是否存在key
        let newArr = [];
        let obj = {};
        for (var i = 0; i < arr.length; i++) {
          if (!obj[arr[i].key]) {
            newArr.push(arr[i]);
            obj[arr[i].key] = true;
          }
        }
        console.log(newArr);

4.数组去重合并

  • 合并两数组  然后去重
  • for循环找出相同的id,组成数组,然后去创建临时数组 ,key值为相同的id

。。。。待更新