# 18-数组练习

01.翻转数组

  <script>
    //需求:求一个任意数组的反转数组

    // 写法一:反向遍历
    function getReverse() {
      let arr = [];
      for (let i = arguments.length - 1; i >= 0; i--) {
        arr[arr.length] = arguments[i];
      }
      return arr;
    }
    let res = getReverse(1, 2, 3, 4, 5);
    console.log(res);//[5, 4, 3, 2, 1]

    // 写法二:变量交换
    function getReverse2() {
      let arr2 = [...arguments];

      // 只需要循环数组长度的一半即可喔
      for (let i = 0; i < arr2.length / 2; i++) {
        let temp;
        // 将[i]存在temp中
        temp = arr2[i];
        // 把最后一个i存到i中
        arr2[i] = arr2[arr2.length - 1 - i];
        // 在把[i]给最后一个i
        arr2[arr2.length - 1 - i] = temp;
      }
      return arr2;
    }

    let res2 = getReverse2(1, 2, 3, 4, 5);
    console.log(res2);// [5, 4, 3, 2, 1]

    // 写法三:用reverse()
    function getReverse3() {
      let arr3 = [...arguments];
      return arr3.reverse();
    }
    let res3 = getReverse3(1, 2, 3, 4, 5);
    console.log(res3); //[5, 4, 3, 2, 1]
  </script>

02.最大值

  <script>
    // 需求:返回任意数组的最大值

    // 写法一:假设法
    function getMax() {
      let max = arguments[0];
      for (let i = 0; i < arguments.length; i++) {
        max = max > arguments[i] ? max : arguments[i];
      }
      return max;
    }
    let res = getMax(1, 2, 3, 4, 5, 6, 9)
    console.log(res);

    // 写法二:排序
    function sortFunc(a, b) {
      return a - b;//升序
    }

    function getMax2() {
      let arr = [...arguments].sort(sortFunc);
      // 最后一个就是最大值
      let max = arr[arr.length - 1];
      return max;
    }
    let res2 = getMax2(88, 44, 2, 0, 55);
    console.log(res2);


    // 写法三:es6
    function getMax3() {
      return Math.max(...arguments);
    }
    let res3 = getMax3(6, 44, 8, 123);
    console.log(res3);
  </script>

03.数组去0

  <script>
    // 要求将数组中的0项去掉,将不为0的的值存入到新的数组 生成新的数组

    // 方法一、
    function removeZero() {
      let arr = [];
      for (let i = 0; i < arguments.length; i++) {
        // 等于0就跳过
        if (arguments[i] === 0) {
          continue;
        }
        // push进去
        arr.push(arguments[i]);
      }
      return arr;
    }
    let res = removeZero(1, 2, 3, 0, 4, 5, 6)
    console.log(res);

    // 方法二
    function removeZero2() {
      let arr2 = [...arguments];
      // 筛选出不为0的并返回
      return arr2.filter(item => { return item !== 0 });;
    }
    console.log(removeZero2(1, 2, 3, 0, 1, 2, 3, 0));
  </script>

04.返回0的索引和次数

  <script>

    // 需求:返回数组中0出现的次数及索引值
    function getZero() {
      let arr = [...arguments],
        arr1 = [],
        num = 0;
      for (let i = 0; i < arr.length; i++) {
        // 查询0
        if (arr[i] === 0) {
          //当arr[i]等于0时,查询arr[i]在数组中的位置
          //然后从当前位置继续往后面查找
          arr1.push(arr.indexOf(arr[i], i));
          //次数+1
          num++;
        }
      }
      return ['索引' + arr1, '次数' + num];
    }

    let res = getZero(1, 2, 3, 0, 1, 5, 0);
    console.log(...res.flat());//拉平二维数组

  </script>

05.数组去重

  <script>
    // 去除数组中的重复项
    // 方法一:includes
    function removeSame() {
      let arr = [...arguments];
      let arr1 = [];
      for (var i = 0; i < arr.length; i++) {
        // 如果不包含就加进去
        if (!arr1.includes(arr[i])) {
          arr1.push(arr[i]);
        }
      }
      return arr1;
    }
    console.log(removeSame(1, 0, 2, 3, 4, 0, 1, 5, 3));


    // 方法二、indexOf
    function removeSame1() {
      let arr = [...arguments];
      let arr2 = [];
      // 遍历
      arr.forEach(item => {
        // arr1里面没有item,就加进去
        if (arr2.indexOf(item) === -1) {
          arr2.push(item);
        }
      })
      return arr2;
    }
    let res2 = removeSame1(1, 2, 3, 4, 5, 4, 2, 3, 8);
    console.log(res2);
  </script>
posted @ 2020-04-21 21:59  小艾同学喔  阅读(119)  评论(0编辑  收藏  举报