当前位置:   article > 正文

Object 常用方法_object.reduce

object.reduce

1、检查多个对象是否相等

  1. const isEqual = (...testObj) => testObj.every((obj) =>
  2. JSON.stringify(obj) === JSON.stringify(testObj[0]));
  3. console.log(isEqual({ foo: 'bar' }, { foo: 'bar' })); // true
  4. console.log(isEqual({ foo: 'bar' }, { bar: 'foo' })); // false

2、从对象数组中提取指定属性的值

  1. const pluck = (objs, property) => objs.map((obj) => obj[property]);
  2. const result = pluk([{name: 'aa', age: 10}, {name: 'bb', age: 5}], 'age')
  3. console.log(result) //[10, 5]

3、反转对象的键和值

  1. const invert = (obj) => Object.keys(obj).reduce((res, k) => Object.assign(res, { [obj[k]]: k }), {});
  2. // 或
  3. const invert = (obj) => Object.fromEntries(Object.entries(obj).map(([k, v]) => [v, k]));
  4. invert({ a: '1', b: '2', c: '3' }); // { 1: 'a', 2: 'b', 3: 'c' }

4、从对象中删除所有 null 和 undefined 的属性

  1. //方法一
  2. const removeProptery = (obj) =>
  3. Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null));
  4. removeProptery ({ a: null, b: undefined, c: 42}); // {c: 42}
  5. // 方法2
  6. removeObjectNull(sourceObj){
  7. Object.keys(sourceObj).forEach(item=>{
  8. if(!sourceObj[item]) delete sourceObj[item]
  9. })
  10. return sourceObj
  11. }
  12. removeObjectNull({ a: null, b: undefined, c: 42})

5、计算两个日期之间的不同天数

  1. const diffDays = (date, otherDate) => Math.ceil(Math.abs(date - otherDate) / (1000 * 60 * 60 * 24));
  2. // 例子
  3. diffDays(new Date('2014-12-19'), new Date('2020-01-01')); // 1839

6、Object.hasOwnProperty()返回布尔值,确认对象自身属性中是否具有指定的属性

  1. const test = {a: 1, b: 2 }
  2. if(testObj.hasOwnProperty(a)){
  3. return true
  4. }

7、Object.assign(target,...sources)用于一个或者多个源对象复制到目标对象,将返回目标对象

Object.assign是浅拷贝,源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换

  1. const testObj1 = {a:1, b:2, c:3},
  2. testObj2 = {d:5, e:7}
  3. const target = Object.assign(testObj1, testObj2)
  4. console.log(target) //{a:1, b:2, c:3, d:5, e:7}

 深拷贝对象

  1. //直接使用JSON.stringfy()将目标对象转化为字符串形式,然后再转为对象
  2. let sourceObj = {a: 'a', b: 'c', d: { e: 'g' }}
  3. let targetObj = JSON.parse(JSON.stringfy(TestObj))
  4. sourceObj.a = 'd'
  5. sourceObj.d.e = 'j'
  6. console.log(sourceObj ) // {a: 'd', b: 'c', d: { e: 'j' }}
  7. console.log(targetObj ) // {a: 'd', b: 'c', d: { e: 'j' }}
  8. //通过递归的方式实现
  9. let sourceObj = {
  10. a: 'a',
  11. b: 2,
  12. c: {
  13. f: 'g',
  14. h: 'j'
  15. },
  16. d: ['e', 'k']
  17. }
  18. function deepCopy(oldObj){
  19. let targetObj = {}
  20. for(let obj in oldObj) {
  21. let item = oldObj[obj] //获取属性
  22. //判断是数组?对象?简单类型?
  23. if(item instanceof Array){
  24. targetObj[obj] = []
  25. deepCopy(targetObj[obj], item)
  26. }else if(item instanceof Object){
  27. targetObj[obj] = {}
  28. deepCopy(targetObj[obj], item)
  29. }else { //简单数据类型,直接赋值
  30. targetObj[obj] = item
  31. }
  32. }
  33. }
  34. const target_obj = deepCopy(sourceObj)
  35. console.log(target_obj )

8、Object.is()判断俩个值是否相等

  • 两个值都是 undefined
  • 两个值都是 null
  • 两个值都是 true 或者都是 false
  • 两个值是由相同个数的字符按照相同的顺序组成的字符串
  • 两个值指向同一个对象

 9、Object.keys(),Object.values(),Object.entries()

Object.keys():返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名
Object.values:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值
Object.entries:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组

  1. let testObj = { a: 1, b: 2, c: 3 };
  2. for (let key of Object.keys(testObj )) {
  3. console.log(key); // 'a', 'b', 'c'
  4. }
  5. for (let value of Object.values(testObj )) {
  6. console.log(value); // 1, 2, 3
  7. }
  8. for (let [key, value] of Object.entries(testObj )) {
  9. console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
  10. }

10、删除对象中多个属性值

  1. let params = {
  2. planCode: '',
  3. orgCode: '0001',
  4. personCode: '',
  5. id: '10'
  6. }
  7. const delPropName = (data, [...args]) => {
  8. args.forEach(item => {
  9. delete data[item]
  10. })
  11. }
  12. delPropName(params , ['planCode', 'id'])
  13. console.log(params)
  14. // {personCode: '', orgCode: '0001'}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/68131?site
推荐阅读
相关标签
  

闽ICP备14008679号