// 判断 obj 是否是一个object类型的对象

      function isObject (obj) {

        returnobj !== null &&typeof obj === 'object'

      }

     

      // 比较两个对象是否相等

      function looseEqual (a, b) {

        varisObjectA = isObject(a);

        varisObjectB = isObject(b);

        if (isObjectA&& isObjectB) { // a,b都是Object的时候先转为字符串然后比较它们

          return JSON.stringify(a) === JSON.stringify(b)

        } elseif (!isObjectA && !isObjectB){ // a,b都不是object时,直接通过String()来转换为字符串进行比较

          return String(a) === String(b)

        } else{ // 当其中一个是object另一个不是时,直接返回false

          return false

        }

      }

     

      // 查询val在数组中的位置,返回索引值,不存在返回 -1

      function looseIndexOf (arr, val) {

        for(var i = 0; i< arr.length; i++) {

          if (looseEqual(arr[i],val)) { return i }

        }

        return-1

      }

     

      // 如果arr 是一个纯Number或者String, looseIndexOf()与indexOf()的作用基本是一样的

      looseIndexOf([1,2,3,4,5],3); // 2 === [1,2,3,4,5].indexOf(3)

      looseIndexOf([1,2,3,4,5],6); // -1 === [1,2,3,4,5].indexOf(6)

      // 但是如果其中是一个包含object类型的数组indexOf()就不会找到其所在的索引

      // 下面是一个使用looseIndexOf的例子

      looseIndexOf([

        {

            name:'obj1',

           age:18

        },

        {

           name:'obj2',

           age:11

        }

      ],{

        name:'obj1',

        age:18

      }); // 0 

     

      // 下面是一个 indexOf的例子

      [

        {

           name:'obj1',

           age:18

         },

        {

           name:'obj2',

           age:11

        }

      ].indexOf({

         name:'obj1',

        age:18

      }) //-1

Logo

前往低代码交流专区

更多推荐