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关于所有数组方法的练习题(供初学者内部消化)--------系列文章的主要内容,如果未能解决你的问题,请参考以下文章