美文网首页
集合运算总结

集合运算总结

作者: miaomiao159 | 来源:发表于2018-05-05 22:28 被阅读0次

    1.弹出数组的最后一个元素

    1)for (let i = 0; i <collection.length ; i++) {
        return collection[collection.length-1];
      }
    
    2)return collection.pop();
    //若是用这个,会返回数组的最后一个元素,但是同时会删除该元素,删除并返回数组的最后一个元素
    

    2.弹出两个集合的交集

       var collection_c=[];
     1) // for (let i = 0; i <collection_b.length ; i++) {
      //   for (let j = 0; j <collection_a.length ; j++) {
      //     if(collection_b[i]==collection_a[j])
      //     {
      //       collection_c.push(collection_b[i]);
      //     }
      //  }
      // }
      // return collection_c;
      
     2) for (let i = 0; i <collection_b.length ; i++) {
        if(collection_a.indexOf(collection_b[i])!=-1)
    //判断collection_b的元素在collection_a有没有出现,不等于-1出现,等与-1,没有出现。
        {
          collection_c.push(collection_b[i]);
        }
    
      }
      return collection_c;
    
    1. 循环字母
    var collection_a = ['t', 'u', 'v', 'w', 'x',
       'y', 'z', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'ag',
       'ah', 'ai', 'aj', 'ak', 'al', 'am', 'an', 'ao', 'ap',
       'aq', 'ar', 'as', 'at', 'au', 'av', 'aw', 'ax', 'ay',
       'az', 'ba'
     ];
     //'z'后依次是'aa', 'ab',用下面循环将之存入data数组中。
    var str = '0abcdefghijklmnopqrstuvwxyz';
     var data=[];
     for (let i = 0; i < str.length; i++) {
       data.push(str[i]);
     }
     for (let i = 1; i < str.length; i++) {
       for (let j = 1; j <str.length ; j++) {
         data.push(str[i]+str[j]);
       }
     }
    

    4.求两个集合的并集

    //将B集合中不存在a集合的元素放入 a集合中,最后反返回a集合。
     1)//学会用标记值初始值=true,不满足的场景设为false,用来排除这种场景。
     //break 语句可用于跳出循环。break 语句跳出循环后,会继续执行该循环之后的代码(如果有的话)。
     //continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。
     for (var i = 0; i < collection_b.length; i++){
        var dup = true;
        for (var j = 0; j < collection_a.length; j++){
          if (collection_b[i] == collection_a[j]){
       //若此处不用这种方式,写为不相等的情况下push,则会将b中每个元素push多次。所以有误。
          dup = false;
            break;
          }
        }
        ////dup=true的情况下push
        if (dup){
          collection_c.push(collection_b[i]);
        }
      }
      return collection_c;
      
    2)  for (var i = 0; i < collection_b.length; i++){
        if(collection_a.indexOf(collection_b[i])==-1)
    //b中的元素不存在a集合中,则将该元素push到a集合中。
        {
          collection_a.push(collection_b[i]);
        }
      }
      return collection_a;
    

    5.从collection中选出不重复的数字

      var collection_a=[];//一个新的临时数组
    1)//   //遍历当前数组
    //   for (let i = 0; i <collection.length ; i++) {
    // //如果当前数组的第i已经保存进了临时数组,那么跳过,
    // //否则把当前项push到临时数组里面
    //    if (collection_a.indexOf(collection[i]) == -1)
    //    {
    //      collection_a.push(collection[i]);
    //    }
    // }
    // return collection_a;
    
     2)//element当前元素,index当前元素的索引
     return collection.filter(function(element,index,collection_a){
        return collection_a.indexOf(element) == index;
    //indexOf只返回元素在数组中第一次出现的位置,如果与元素位置不一致,
    说明该元素在前面已经出现过,是重复元素
      });
    

    6.从collection中计算出每个数的个数

       var m={};
      for (let i = 0; i <collection.length ; i++) {
        if(collection[i] in m)
        {
      //把关键字为collection[i]的值赋值关键字为collection[i]的值+1.
          m[collection[i]]=m[collection[i]]+1;
        }
        else
        {
          m[collection[i]]=1;//把关键字为collection[i]的值赋值为1.
        }
      }
      return  m;
    

    7.选出A集合中与B集合中的不共有元素,即为并集减去交集

     //splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
       //求差集
      for (let i = 0; i <collection_c.length ; i++) {
        // collection_a.splice(collection_a.indexOf(collection_c[i]),1);
        for (let j = 0; j <collection_a.length ; j++) {
          if(collection_c[i]==collection_a[j])
          {
    //删除collection_a集合中下标从j开始的第一个元素,即删除下标为j的元素。
            collection_a.splice(j,1);
            break;
          }
        }
      }
      return collection_a;
    

    8.var collection = [1, [2], [3, 4]];将该数组转为一维数组。

    var collection_a=[];
     for (var i = 0; i < collection.length; i++) {
    //instanceof则为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例
       if(collection[i] instanceof Array)
       {
         for (var j = 0; j < collection[i].length; j++) {
           collection_a.push(collection[i][j]);
         }
       }
      else
       {
         collection_a.push(collection[i]);
       }
     }
     return collection_a;
    

    9.把二维数组变成一维数组,消除重复,按照第一次出现的顺序排列最后的输出结果。

    var collection_a=[];
    var collection_b=[];
     //在这里写入代码
     //二维数组变成一维数组
     for (var i = 0; i < collection.length; i++) {
         for (var j = 0; j < collection[i].length; j++) {
           collection_a.push(collection[i][j]);
         }
     }
     //消除重复,按照第一次出现的顺序排列最后的输出结果
     for (let i = 0; i < collection_a.length; i++) {
       if(collection_b.indexOf(collection_a[i])==-1)//未出现
       {
         collection_b.push(collection_a[i]);
       }
     }
     return collection_b;
    
    1. 从大到小排序
    1)//  for (let i = 0; i < collection.length; i++) {
     //    for (let j = i + 1; j < collection.length; j++) {
     //      if (collection[i] < collection[j]) {
     //        var temp;
     //        temp = collection[i];
     //        collection[i] = collection[j];
     //        collection[j] = temp;
     //      }
     //    }
     //  }
    2)return collection.sort(function (a,b) {return -(a-b); });//从大到小排序
        return collection.sort();//从小到大排序
    

    11.判断两个集合是否相同

     1)// if (collection_a.length == collection_b.length) {
      //   for (let i = 0; i < collection_a.length; i++) {
      //     if (collection_a[i] != collection_b[i]) {
      //       return false;
      //     }
      //   }
      // }
      // else {
      //   return false;
      // }
      // return true;
     2) return collection_a.reduce(function (total, currentValue, currentIndex) {
        return total && (currentValue == collection_b[currentIndex]);
      }, true);
    

    12.'1->4->6->2->3->10->9->8->11->20->19->30'的中位数。

    //split(),根据特定的字符切割字符串并且返回生成的数组。
    //splice()用法 : splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
    //slice() 方法可从已有的数组中返回选定的元素。eg:arrayObject.slice(start,end)
    //parseInt(a),字符串转整数
    var a = collection.split("->").map(function (a) {
       return parseInt(a);
     });
     a.sort(function (a, b) {
       return a - b;
     });
     if(a.length%2==0)
     {
       return (a[a.length/2]+a[a.length/2-1])/2;
     }
     else {
       return a[(a.length-1)/2];
     }
    
    1. 找出某元素在给定集合中的第一个下标
     return collection.reduce(function (init, value, index) {
        if (value == element) {
          if (init == -1) {
            init=index;
          }
        }
        return init;
      }, -1);
    

    14.找出某元素在给定集合中的最后一个下标

       return collection.reduce(function (init,value,index) {
        if(value==element)
        {
          init=index;
        }
        return init;
      },-1);
    

    15.根据给定数字无限分割至等于或者小于0

     var collection=[number];
      while (number>0){
        number=Math.round((number-interval)*10)/10;//保留一位小数
        collection.push(number);
      }
      return collection;
    

    16.选出A集合中元素的key属性,跟B对象中value属性中的元素相同的元素

       var  collection_b=[];
      for (let i = 0; i <collection_a.length ; i++) {
          for (let k = 0; k <object_b.value.length ; k++) {
            if(collection_a[i]['key'] == object_b.value[k])
            {
              collection_b.push(collection_a[i]['key']);
            }
          }
      }
      return collection_b;
    

    17.把A集合中相同的元素统计出数量

     var collection = [
        "a", "a", "a",
        "e", "e", "e", "e", "e", "e", "e",
        "h", "h", "h", "h", "h", "h", "h", "h", "h", "h", "h",
        "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t", "t",
        "t", "t", "t", "t", "t", "t", "t",
        "f", "f", "f", "f", "f", "f", "f", "f", "f",
        "c", "c", "c", "c", "c", "c", "c", "c",
        "g", "g", "g", "g", "g", "g", "g",
        "b", "b", "b", "b", "b", "b",
        "d", "d", "d", "d", "d"
      ];
      
      var collection_a=[];
      var m={};
      for (let i = 0; i <collection.length ; i++) {
        if (collection[i] in m) {
          m[collection[i]]=m[collection[i]] + 1;
        }
        else {
          m[collection[i]]=1;
        }
      }
      for (var key in m) {
        var temp={};
        temp['key']=key;
        temp['count']=m[key];
        collection_a.push(temp);
      }
       return collection_a;
       
      var collection = [
        "a", "a", "a",
        "e", "e", "e", "e", "e", "e", "e",
        "h", "h", "h", "h", "h", "h", "h[3]", "h", "h",
        "t", "t-2", "t", "t", "t", "t", "t", "t", "t[10]",
        "f", "f", "f", "f", "f", "f", "f", "f", "f",
        "c:8",
        "g", "g", "g", "g", "g", "g", "g",
        "b", "b", "b", "b", "b", "b",
        "d-5"
      ];
        var collection_a = [];
      var m = {};
      for (let i = 0; i < collection.length; i++) {
        if (collection[i].length == 1) {
          var k=collection[i];
          var v=1;
          if (k in m) {
            m[k] = m[k] + v;
          }
          else {
            m[k] = v;
          }
        }
        else {
          if(collection[i].length>3)
          {
            var k = collection[i][0];
            var v = parseInt(collection[i].slice(2,collection[i].length-1));
            if (k in m) {
              m[k] = m[k] + v;
            }
            else {
              m[k] = v;
            }
          }
          else {
            var k = collection[i][0];
            var v = parseInt(collection[i].slice(2));
            if (k in m) {
              m[k] = m[k] + v;
            }
            else {
              m[k] = v;
            }
          }
        }
      }
      for (var key in m) {
        var temp = {};
        temp['name'] = key;
        temp['summary'] = m[key];
        collection_a.push(temp);
      }
      return collection_a;
    

    17.统计出A集合中相同的元素的个数,有过有-就把-右边的数字也计算入个数,形成C集合,C集合中的元素要形如{key:"a", count: 3},然后选出C集合中的元素的key属性跟B对象中value属性中的元素相同的元素,把他们的count,满3减1,输出减过之后的新C集合",

     function() {
        var collection_b = [];
      var m = {};
      for (let i = 0; i < collection_a.length; i++) {
        if (collection_a[i].length == 1) {
          var k=collection_a[i];
          var v=1;
          if (k in m) {
            m[k] = m[k] + v;
          }
          else {
            m[k] = v;
          }
        }
        else {
          var k = collection_a[i][0];
          var v = parseInt(collection_a[i].slice(2));
          if (k in m) {
            m[k] = m[k] + v;
          }
          else {
            m[k] = v;
          }
        }
      }
      for (var key in m) {
        var temp = {};
        temp.key = key;
        temp.count = m[key];
        collection_b.push(temp);
      }
      return collection_b.map((function (a) {
        if (object_b.value.indexOf(a.key) != -1) {
          a.count-=Math.floor(a.count/3);
        }
        return a;
      }));
    

    18.数组的每个偶数映射为字母

       var str = '0abcdefghijklmnopqrstuvwxyz';
      return collection.filter(function (a) {
        return a % 2 == 0;
      })
        .map(function (a) {
          return str[a];
        });
    

    19.(20,53)的中位数(如果是小数上取整)对应的字母

    var str='0abcdefghijklmnopqrstuvwxyz';
      var data=[];
      for (let i = 0; i < str.length; i++) {
        data.push(str[i]);
      }
      for (let i = 1; i <str.length ; i++) {
        for (let j = 1; j < str.length; j++) {
          data.push(str[i]+str[j]);
        }
      }
        if(collection.length%2==1){
        return data[collection[collection.length-1/2]];//长度为5,应该取下标为2的元素
      }else {
        return data[Math.ceil((collection[collection.length/2]+collection[(collection.length/2)-1])/2)];
      }
    

    20.计算第偶数个元素的平均数,即下标为偶数的元素的平均值

    var calculate_average = function(collection){
      var res=collection.filter(function (a,index) {
        return index%2==1;//第偶数个元素即下标为奇数的元素
      });
      var sum=res.reduce(function (a,b) {
        return a+b;
      });
      return sum/res.length;
    

    21.集合中第偶数个元素的个数为奇数时,计算所有第偶数个元素的中位数
    集合中第偶数个元素的个数为偶数时,计算所有第偶数个元素的中位数

       //过滤所有第偶数个元素
      var res=collection.filter(function (a,index) {
      return index%2==1;//第偶数个元素即下标为奇数的元素
    });
    //判断第偶数个元素的个数为偶数或偶数
    if(res.length%2 ==1)
    {
      return res[(res.length-1)/2];
    }
    else
    {
      return (res[res.length/2]+res[res.length/2-1])/2;
    }
    
    1. it('首先选出所有第偶数个元素,然后选出其中的偶数,按几位数分组,并计算每组的平均数', function() {
      var result = even_group_calculate_average(collection_a);
      expect(result).toEqual([4, 56, 556]);
      });

    it('首先选出所有第偶数个元素,当不含有偶数时', function() {
    var result = even_group_calculate_average(collection_b);
    expect(result).toEqual([0]);
    });

    it('首先选出所有第偶数个元素,然后选出其中的偶数,按几位数分组,当不含有1位,2位的数字,但含有3位的情况时,计算这组的平均数', function() {
    var result = even_group_calculate_average(collection_c);
    expect(result).toEqual([218]);
    });

     //首先选出所有第偶数个元素,然后选出其中的偶数 
       var res = collection.filter(function (a, index) {
        return index % 2 == 1 && a % 2 == 0;////第偶数个元素即下标为奇数的元素以及元素值为偶数
      });
    //首先选出所有第偶数个元素,然后选出其中的偶数,再判断其个数。 
      if (res.length == 0) {
        return [0];
      }
      else {
        var a1 = res.filter(function (a) {
          return a / 10 < 1;
        });
        var a2 = res.filter(function (a) {
          return a / 10 >= 1 && a / 100 < 1;
        });
    
        var a3 = res.filter(function (a) {
          return a / 100 >= 1;
        });
        if(a1.length==0&& a2.length==0)
        {
          return [a3.reduce(function (a,b) {
            return a+b;
          })/a3.length];
        }
        else {
          return [a1.reduce(function (a,b) {
            return a+b;
          })/a1.length,a2.reduce(function (a,b) {
            return a+b;
          })/a2.length,a3.reduce(function (a,b) {
            return a+b;
          })/a3.length];
        }
      }
    
    1. var collection_a = [1, 2, 3, 4, 5, 6];

    it('下标为偶数的元素中,存在3', function() {
    var result = is_exist_element(collection_a, 3);
    expect(result).toEqual(true);
    });

    it('下标为偶数的元素中,不存在4', function() {
    var result = is_exist_element(collection_a, 4);
    expect(result).toEqual(false);
    });

     var res = collection.filter(function (value, index) {
       return index % 2 == 0;//下标为偶数的元素
     });
     return res.indexOf(element) != -1;//不存在false,存在true.
    

    相关文章

      网友评论

          本文标题:集合运算总结

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