当前位置:首页 > javascript > 正文内容

数据各种去重复,合并方法

自由小鸟3年前 (2022-08-04)javascript1310

1,数组对象去重通过id

function reduce(arr) {
  var obj = {};
  arr = arr.reduce(function (item, next) {
    obj[next.id] ? "" : (obj[next.id] = true && item.push(next));
    return item;
  }, []);
  return arr;
}

合并对象数据深度

function deepMerge(obj1, obj2) {
  let key;
  for (key in obj2) {
    obj1[key] =
      obj1[key] &&
      obj1[key].toString() === "[object Object]" &&
      obj2[key] &&
      obj2[key].toString() === "[object Object]"
        ? deepMerge(obj1[key], obj2[key])
        : (obj1[key] = obj2[key]);
  }
  return obj1;
}

3,深度复制拷贝数据


function judgeType(obj) {
    const toString = Object.prototype.toString;
    const map = {
      '[object Boolean]': 'boolean',
      '[object Number]': 'number',
      '[object String]': 'string',
      '[object Function]': 'function',
      '[object Array]': 'array',
      '[object Date]': 'date',
      '[object RegExp]': 'regExp',
      '[object Undefined]': 'undefined',
      '[object Null]': 'null',
      '[object Object]': 'object',
    };
    if (obj instanceof Element) {
      return 'element';
    }
    return map[toString.call(obj)];
  }
export function deepClone(data){
    const type = judgeType(data);
    let obj;
    if (type === 'array'){
    obj = [];
    } else if (type === 'object') {
    obj = {};
    } else {
// 不再具有下一层次
    return data;
    }
    if (type === 'array'){
    for (let i = 0, len = data.length; i < len; i++) {
        obj.push(deepClone(data[i]));
    }
    } else if (type === 'object') {
    // 对原型上的方法也拷贝了....
    for (const key in data) {
        obj[key] = deepClone(data[key]);
    }
    }
    return obj;
}

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://webge.net/?id=145

“数据各种去重复,合并方法” 的相关文章

代理事件绑定

代理事件绑定

 代理绑定事件通用绑定事件的函数...

js 面向对象类

js 面向对象类

类与实例:    类的声明    生成实例类与继承    如何实现继承    继承的几种方式原型链实现继承new child2.__prot...

防抖和节流

如果我在一个时间内只执行一次,最好用防抖,如果只是想在执行时,设置一下间隔时间那么用节流 防抖是在一个时间内只能执行一次,如果频繁操作就会清除重新开始计算执行,我设置的时间内整个过程中只会执行一次/* 函数的防抖 debounce,不是某个事件触发就去执行函数,而是在指定的时间间隔内执行...

js 宏任务和微任务

js 宏任务和微任务

首先讲粗略说一下宏任务和微任务宏任务:script(整体代码), setTimeout, setInterval微任务包括: Promise, MutationObserver(html5新特性),process.nextTick。 代码从上至下在执行过程,遇到Promise,new Promi...

js原型链

js原型链

看到好的文章赶紧都收藏起来,但是有时收藏的太多内存不够呀,还是记录到我的博客上比较好,有时好的文章突然的某天就打不开了,那是多少痛的领悟,哈哈 文章转自 https://juejin.im/post/5d31ea79e51d457778117452...

js cookie实现在一天内只执行一次

function versionExpireTime(key,method) { var v = getCookie(key); if (!v) { method(true); //外面传进来的callback,方便告诉外部是否过期 //获取...