js关于所有数组方法的练习题(供初学者内部消化)--------系列文章

Posted 贪吃ღ大魔王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js关于所有数组方法的练习题(供初学者内部消化)--------系列文章相关的知识,希望对你有一定的参考价值。

系列文章目录

js关于所有循环的逻辑练习题(供初学者内部消化)---------------------------------系列文章(一)

https://blog.csdn.net/weixin_44070254/article/details/116136381?spm=1001.2014.3001.5501

js关于所有字符串方法的练习题(供初学者内部消化)-----------------------------系列文章(二)

https://blog.csdn.net/weixin_44070254/article/details/116198289?spm=1001.2014.3001.5501

javascript编程基础练习题—干货分享

https://blog.csdn.net/weixin_44070254/article/details/116070003?spm=1001.2014.3001.5501


前言


一、数组去重

方法一

遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组

function removeDuplicatedItem(ar) {
    var ret = [];

    for (var i = 0, j = ar.length; i < j; i++) {
        if (ret.indexOf(ar[i]) === -1) {
            ret.push(ar[i]);
        }
    }

    return ret;
}

方法二

遍历数组,利用object对象保存数组值,判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存

function removeDuplicatedItem2(ar) {
    var tmp = {},
        ret = [];

    for (var i = 0, j = ar.length; i < j; i++) {
        if (!tmp[ar[i]]) {
            tmp[ar[i]] = 1;
            ret.push(ar[i]);
        }
    }

    return ret;
}

方法三

数组下标判断法, 遍历数组,利用indexOf判断元素的值是否与当前索引相等,如相等则加入

function removeDuplicatedItem3(ar) {
    var ret = [];

    ar.forEach(function(e, i, ar) {
        if (ar.indexOf(e) === i) {
            ret.push(e);
        }
    });

    return ret;
}

方法四

数组先排序, 然后比较俩数组一头一尾进行去重

function removeDuplicatedItem4(ar) {
    var ret = [],
        end;
    ar.sort();
    end = ar[0];
    ret.push(ar[0]);

    for (var i = 1; i < ar.length; i++) {
        if (ar[i] != end) {
            ret.push(ar[i]);
            end = ar[i];
        }
    }

    return ret;
}

二、数组的翻转

var arr=[1,2,3,4,5,6];
var arr1=[];

console.log(arr.reverse());

方法一:取最后一个元素放到arr1中

for(var i=0;i<arr.length;i++){
   //元素下标的长度=长度-1-i
    arr1[i]=arr[arr.length-1-i];
}
console.log(arr1);

 

方法二:

for(var i=arr.length-1;i>=0;i--){
  arr1[arr1.length]=arr[i];
}


三、数组的排序(重点)

选择排序

  <script>
    var arr = [5, 4, 3, 2, 1];

    // 控制比较的遍数
    for (var i = 0; i < arr.length - 1; i++) {
      // 假设最小值
      var minIndex = i;
      var min = arr[minIndex];

      // 使用最小值和数组的每一个元素对比,找出真正最小值,交换位置
      for (var j = i + 1; j < arr.length; j++) {
        if (min > arr[j]) {  // 假设最小值大于循环的元素,更新假设最小值
          min = arr[j];
          minIndex = j;

        }
      }
      // 交换假设最小值和真正最小值的位置
      arr[minIndex] = arr[i];
      arr[i] = min;

    }
    console.log(arr);

  </script>

计数排序

  1 将原数组的元素作为临时数组的索引
  2 统计每一个元素出现的次数
  3 将临时数组的索引,再设置回到原始数组
 <script>
    /*
      利用数组的索引自动排序功能

      1 将原数组的元素作为临时数组的索引
      2 统计每一个元素出现的次数
      3 将临时数组的索引,再设置回到原始数组
    */
    var arr = [100, 87, 66, 92, 35, 35, 24, 11, 2, 3, 87, 91];
    var tmp = [];
//  console.log(arr);


    // 循环原始数组
    for (var i = 0; i < arr.length; i++) {
      // 判断索引对应的元素是否存在
      if (tmp[arr[i]]) {  // 存在,增加元素出现的次数
        tmp[arr[i]]++;
      } else {  // 不存在,就给对应的索引,新增元素
        tmp[arr[i]] = 1;
      }

    }

       console.log(tmp, 11);

    // 将原始数组设置为null
    arr.length = 0;
//     console.log(arr);

    // 遍历临时数组,将索引设置给原始数组
    for (var j = 0; j < tmp.length; j++) {
      // 为空则跳过
      if (!tmp[j]) continue;
      //  console.log(tmp[j]);
      // 将临时数组的索引,存到原始数组
//      arr.push(j)
      for (var k = 1; k <= tmp[j]; k++) {
        // 永远向数组最后添加元素
        //  arr[arr.length] = j;
        arr.push(j)
      }

    }

    console.log(arr);



  </script>

递归排序(二分法)

 <script>
    /*
      核心:利用递归分出比数组中间元素小的元素

    
    */
    var arr1 = [8, 4, 3, 2, 6, 7, 1, 5, 9];

    //1 定义函数
    function fn(arr) {
      // 2 数组长度小于等于1,则没必要继续排
      if (arr.length <= 1) return arr;

      // 3 取出数组的中间元素
      var ci = parseInt(arr.length / 2);
      // console.log(ci);
      //  var cNum = arr[ci];
      var cNum = arr.splice(ci, 1)[0]
      //  console.log(cNum);

      // 4 声明左右连个数组,比中间元素大的放右边,小的放左边
      var left = [];
      var right = [];

      // 5 循环数组,和中间元素对比
      for (var i = 0; i < arr.length; i++) {
        if (cNum > arr[i]) { // 小的放左边数组
          left.push(arr[i])
        } else {
          right.push(arr[i])
        }
      }

      console.log(left, 'left');
      console.log(right, 'right');

      return fn(left).concat(cNum, fn(right));
    }

    var res = fn(arr1);
    console.log(res);


  </script>

冒泡排序

	<script type="text/javascript">
		var arr = [1,5,3,2,4];
		for (var i = 0;i <= arr.length - 1;i++) {
			for (var j = 0;j <= arr.length - i - 1;j++) {
				if (arr[j] > arr[j + 1]) {
					var num = 0;
					num = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = num;
				}
			}
		}
		console.log(arr);
	</script>

四、 数组的去重

1、简单的去重方法

* */
function uniq(array){
    var temp = []; //一个新的临时数组
    for(var i = 0; i < array.length; i++){
        if(temp.indexOf(array[i]) == -1){
            temp.push(array[i]);
        }
    }
    return temp;
}

var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(aa));

第二种:

	<script type="text/javascript">
		function quit(arr) {
			var arr1 = [];
			for (var i = 0;i <= arr.length - 1;i++) {
				if(arr1.indexOf(arr[i]) === -1) {
					arr1.push(arr[i]);
				}
			}
			return arr1;
		}
	  	var demo = quit([2,6,8,1,9,2,1,8,9,4,7,4,3,7]);
	  	console.log(demo);
	</script>

第三种:

		<script type="text/javascript">
			var arr = [2,9,6,1,3,2,8,7,11,22,35];
			var arr1 = [];
			var j = 0;
			for (var i = 0;i < arr.length;i++) {
				if (arr[i] > 5) {
					arr1[j] = arr[i];   // arr1[arr1.length] = arr[i];
					j++;
				}
			}
			console.log(arr1);
			
//			数组的去重
			var arr2 = [0,2,3,5,7,9,1,6];
			var arr3 = [];
			for (var i = 0;i < arr2.length;i++) {
				if (arr[i] != 0) {
					arr3[arr3.length] = arr[i];
				}
			}
			console.log(arr3);
		</script>

第四种

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return
    }
    var array = [];
    for (var i = 0; i < arr.length; i++) {
        if (array .indexOf(arr[i]) === -1) {
            array .push(arr[i])
        }
    }
    return array;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
   // [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]  //NaN、{}没有去重


五、数组的其他方法

1.数组的遍历

1,普通for循环,经常用的数组遍历

var arr = [1,2,0,3,9];
 for ( var i = 0; i <arr.length; i++){
    console.log(arr[i]);
}

2,forEach,数组自带的循环,主要功能是遍历数组

arr.forEach(function(value,i){
  console.log('forEach遍历:'+i+'--'+value);

})

3,map遍历,map即是 “映射”的意思 用法与 forEach 相似

arr.map(function(value,index){
    console.log('map遍历:'+index+'--'+value);
});

2.数组的原有方法和ES5新增方法

1、join()
join(separator): 将数组的元素组起一个字符串

var arr = [1,2,3];
console.log(arr.join()); // 1,2,3
console.log(arr.join("-")); // 1-2-3
console.log(arr); // [1, 2, 3](原数组不变)


2、push()和pop()

push(): 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
pop():数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项。

var arr = ["Lily","lucy","Tom"];
var count = arr.push("Jack","Sean");
console.log(count); // 5
console.log(arr以上是关于js关于所有数组方法的练习题(供初学者内部消化)--------系列文章的主要内容,如果未能解决你的问题,请参考以下文章

JS实现循环删除数组中元素的方法介绍

JS中,关于数组的练习题

node.js做一个简单的爬虫,专爬网站接口

node.js做一个简单的爬虫,专爬网站接口

Python经典编程习题100例,供初学者学习

Jsの练习-数组常用方法 -slice()