美文网首页
对对象值进行深层判断

对对象值进行深层判断

作者: kim_jin | 来源:发表于2019-10-11 11:00 被阅读0次

当我们要进行多级的对象的嵌套的时候,如果我们要是进行一层层的判断,我们会发现我们将大部分的时间花费在了判断上面,这样并不利于代码的可读性,举一个例子

a = aaa.bbb.ccc.vvv.ddd.ggg.www

在上面的操作我们必须要确保aaaaaa.bbbaaa.bbb.cccaaa.bbb.ccc.vvv....不为undefined,这样的话,程序的判断就会有很多,我们现在封装了一个方法

// target :是你要判断到哪一级
// res:是你的元数据
// flag:判断你是用什么方式传入的 当flag 为true的时候 ,是.的形式,否则为[]形式
      const objectIsNull = (target, res, flag) => {
        let finnalResult = {};
        let result = [];
        finnalResult.location = '';
        let currenTarget = "";
        let num = 0;
        const IterationObject = (target, currenTarget, res, num) => {
          let targetValue = 0;
          let temp;
          // 当flag 为true的时候 ,是.的形式
          if (flag) {
            temp = target.split(".");
          } else {
            let processData = target.replace(/\[/g, "").replace(/\"/g, "");
            temp = processData.split("]");
            temp.pop();
          }
          targetValue = temp.length;
          temp.length = num + 1;
          currenTarget = temp.join(".");
          if (!getValue(res, currenTarget)) {
            result.push(false);
            finnalResult.location = currenTarget;
            return;
          }
          num++;
          if (num < targetValue) {
            IterationObject(target, currenTarget, res, num);
          }
          result.push(true);
          return;
        };
        IterationObject(target, currenTarget, res, 0, flag);
        finnalResult.result = result.shift();
        return finnalResult;
      };

具体的示例如下

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script>
      //  const obj = {a: {b: {c: {name: 'json'}}}};
      const getValue = function(res, string) {
        const stringArr = string.split(".");
        const length = stringArr.length;
        for (let key = 0; key < length; key++) {
          if (!res[stringArr[key]]) {
            return undefined;
          }
          res = res[stringArr[key]];
        }
        return res;
      };

      let res1 = { 禁忌: { 禁忌: { 禁忌: { 禁忌: {} } } } };
      let target1 = '["禁忌"]["禁忌"]["禁忌"]["禁忌"]["禁忌"]';
      let res = { a: { b: { c: {} } } };
      let target = "a.b.c";

      const objectIsNull = (target, res, flag) => {
        let finnalResult = {};
        let result = [];
        finnalResult.location = '';
        let currenTarget = "";
        let num = 0;
        const IterationObject = (target, currenTarget, res, num) => {
          let targetValue = 0;
          let temp;
          // 当flag 为true的时候 ,是.的形式
          if (flag) {
            temp = target.split(".");
          } else {
            let processData = target.replace(/\[/g, "").replace(/\"/g, "");
            temp = processData.split("]");
            temp.pop();
          }
          targetValue = temp.length;
          temp.length = num + 1;
          currenTarget = temp.join(".");
          if (!getValue(res, currenTarget)) {
            result.push(false);
            finnalResult.location = currenTarget;
            return;
          }
          num++;
          if (num < targetValue) {
            IterationObject(target, currenTarget, res, num);
          }
          result.push(true);
          return;
        };
        IterationObject(target, currenTarget, res, 0, flag);
        finnalResult.result = result.shift();
        return finnalResult;
      };
      let aaa = objectIsNull(target, res, true);
      console.log(aaa);

      let bbb = objectIsNull(target1, res1, false);
      console.log(bbb);
    </script>
  </head>
</html>

返回结果:

jieguo

相关文章

  • 对对象值进行深层判断

    当我们要进行多级的对象的嵌套的时候,如果我们要是进行一层层的判断,我们会发现我们将大部分的时间花费在了判断上面,这...

  • 深层克隆和浅层克隆

    浅层克隆 深层克隆 //遍历对象 for(var prop in obj)//1.判断是不是原始值 type...

  • 数据类型的判断

    1.typeof:能判断所有值类型,函数,不能判断、数组、对象进行精确判断; 2.instanceof :判断对象...

  • 微信小程序数组操作

    tabs数组对象下的值进行条件判断并修改属性值 isActive数组对象属性,v数组对象,i遍历下标 tabs.f...

  • Python is 与 == 的区别

    在Python中使用is与 ==都可以用来判断两个对象是否相等。不同的是 ==是对对象的值进行判断,而is是对对象...

  • 笨办法学分析[05]pandas常用操作(二)

    22.缺失值判断: s.isnull() isnull()方法可以对缺失值NaN值进行判断,返回对Series或D...

  • 对象

    1.对象分为值类型和引用类型 值类型(不是对象) 引用类型(都是对象) 类型的判断值类型判断用typeof引用类型...

  • Python 中的 == 与 is

    == 用于判断值是否相同 is 用于判断是否是同一对象、同一地址

  • js

    一、判断对象是否存在//判断对象是否存在,还要判断对象是否有null值if(!myObj){var myObj={...

  • Java中的equals方法和"=="的功能

    功能:判断对象是否相等区别: equals方法比较的是对象的值= =:比较的是对象值的内存地址,对基本数据类型来说...

网友评论

      本文标题:对对象值进行深层判断

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