美文网首页
数组和对象在业务中的华尔兹

数组和对象在业务中的华尔兹

作者: hegege | 来源:发表于2020-07-16 22:53 被阅读0次

1 数组和对象的 判断

一般我们用type of 去判断类型

console.log(typeof []);  // object
console.log(typeof {}); // object
console.log(typeof null); // object  // null是一个空对象

所有type of 是判断不了数组和对象的
那么我们一般用什么去做判断哪 还有一种方法 但是有缺陷

我们有时也会用 instance of  判断
instanceof 我们用来判断要检测对象的原型链上是否有某个函数的protoType 属性 
console.log(a instanceof Array); // true []
console.log(a instanceof Object); // true  数组也是对象 {}
但是它只有一个 全局的作用域  如果在网页中有多个 iframe  我们就会有多个Array的构造函数 这样判断返回 false

我们也会在代码里也会遇到这样的情况


console.log(a.constructor === Array); // true 只有数组的constructor是Array
console.log(b.constructor === Object); // 只有对象的constructor是 Object
这种方法时可用的
我们也经常会用 Array.isArray 来判断数组
console.log(Array.isArray([])); // true


再也一种方法 那就是
Object.prototype.toString.call(name) 这种方法是可以区分数组和对象,并且不会对你有什么后顾之忧

console.log(Object.prototype.toString.call([])==='[object Array]') //true
console.log(Object.prototype.toString.call({})==='[object Object]') // true

综上所述 我们常用

数组:Array.isArray()   Object.prototype.toString.call([])
对象   Object.contructor = Object  
Object.prototype.toString.call({}) 去判断数组和对象

学会 数组和对象的类型判断了 我们学会第一步了

2 优雅的代码的编写

我们在实际业务中 免不了对数组和对象进行处理,我们要学会利用简单的办法 抽象出来方法来。我们可能在代码中会写很多 if else switch case 这些复杂的判断 这个时候我们大多用对象枚举的方式和map 的方式去优化他们,(这个我会专门写一篇去告诉大家如何优化),特别是一些 status 状态的判断,订单类型(购买中,已完成,已退款),交通(自行车,汽车,地铁)等等,我们都可以把它们作为枚举对象,用的时候直接枚举取值就行了。这样我们项目里就会有很多枚举的对象,那么我们代码既可以抽象出来一个方法共同调用

举个例子说明一下 我们获取 sendStatus 需要在页面上显示出来汉字,
我们一般用 if  else  和switch  case 处理
  switch (sendStatus) {
                case 0:
                    item.statusText = '待审批';
                    break;
                case 1:
                    item.statusText = '已审批';
                    break;
               case 2:
                    item.statusText = '已拒绝';
                    break;
                default:
                    item.activationStatusText = '';
                    break;
            }
此时页面中肯定有很多类似的处理,代理会非常臃肿,优雅的写法那么我们可以做一个enum的js
统一把它们做成枚举值进行处理
 static sendStatus = {
        0: '待审批',
        1: '已审批',
        2: '已拒绝',
        3: '发券完成',
        4: '发券异常',
}
static  supply = {
        supInfo0: '0',
        supInfo1: '1',
        supInfo2: '2',
        supInfo3: '3'
 }
我们取值的时候直接用 sendStatus[key]  supply[key]  这样去处理

但是这个时候我们是不是可以更高级一点 把 我们的枚举对象和 key  都传进一个方法里,让方法去处理哪,我们想一下是可以的  


   * 从枚举对象中获取展示文本
     * @param {Object} enumItem 枚举对象
     * @param {String|Array<String>} values 值或值集合
     * @param {String} delimiter 分隔符
     * @param {String} defaultValue 如果值是null,则显示该默认值
     * @returns {String} 返回展示的文本
     */
    getText(enumItem = {}, values = '', delimiter = ', ', defaultValue = '') {
        if (!Array.isArray(values)) {
            values = [values];
        }
        // 是否是Object,因为enumItem有默认值,不会出现undefined
        if (enumItem.constructor !== Object) {
            return values.join(delimiter);
        }
        return values
            .map(key => {
                return enumItem[key] || ç || key;
            })
            .join(delimiter);
    }

上面这个方法  我们支持 传入values 值或值集合,如果我们传入字符串,            values = [values];我们把它转化成数组,分隔符让我们最后 组装数据用的分隔符,defaultValue使我们的默认值,这样在我们的项目中统一管理我们的状态,代码是否一下子清晰了许多了哪
 

3 处理数组对象的去重组装

这是下面一个业务我需要判端我当前的数组对象中没有和勾选的列表的数据一致的数据我才可以添加数据
直接看代码

const arr = []
 selectOnClick(selectedRows = []) {
        selectedRows.forEach((a, index) => {
            const isInclude = arr.some(b => a.vCode === b.vCode);
            if (!isInclude) {
                arr.push(selectedRows[index]);
            }
        });
    }
这样我们就很好地处理了业务耦合关系  

相关文章

  • 数组和对象在业务中的华尔兹

    1 数组和对象的 判断 一般我们用type of 去判断类型 所有type of 是判断不了数组和对象的那么我...

  • 对象和数组神奇之处转换/转换业务场景

    对象和数组神奇之处转换 在平常开发中,需要数组和对象直接转换,方便我们找对应属性的数据 数组 => 对象 场景一 ...

  • JSON数组

    数组作为JSON对象 实例 JSON数组在中括号中书写 JSON对象中的数组 对象属性的值可以是一个数组实例:

  • MongoDB第三讲 深入MongoDB的插入、删除和更新操作

    MongoDB的数组和对象类型 在MongoDB中可以添加数组和对象类型,这其实就对应了关系数据库中OneToMa...

  • 引用类型数组

    数组是对象 在Java中,数组属于引用类型数据数组数据在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指...

  • HZ数组对象去重

    // 根据数组对象中属性去重 思路:在原数组对象中 直接捡出 不重复的 数组对象, 过程:1.获取不重复的属性数组...

  • 概念集合

    JS中的数组和Arrary的区别 js中的数组就是array对象

  • java调用本地方法--JNI访问对象型数组

    本篇结构: 简介 实例 一、简介 补充JNI对象数组访问实例。 JNI 中的数组分为基本类型数组和对象数组,它们的...

  • 20160710_Programming

    ------JAVA20160710------1、实际的数组对象存储在堆内存中,如果引用该数组对象的数组引用变量...

  • forEach、for-in与for-of的区别

    遍历数组推荐for of ,遍历对象推荐 for in for in可以用来便利数组和对象 for in在遍历数组...

网友评论

      本文标题:数组和对象在业务中的华尔兹

      本文链接:https://www.haomeiwen.com/subject/fvvphktx.html