练习 JavaScript 数组方法

1. 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。
// 方式一:
 var arr = [];
    var newArr = [];
    arr.length = 30;
    var sum = 0;
    for(var i=1;i<=arr.length;i++){
        // 因为 i从 1开始 ,而数组的下标是 0 开始
        arr[i-1] = 2*i;

        // 判断 每五个数为一组,计算平均值,并放入 newArr 数组内
        if(i % 5 !== 0){
            sum += arr[i-1];
        }else{
            newArr.push((sum+arr[i-1])/5);
            sum = 0;
        }
    }
    console.log(arr);
    console.log(newArr);

封装函数写的方法:

<input type="button" value="测试" onclick="testf()"> 
// 方式二:
function testf(){
   var arr=[];

   //1)、从2开始给元素赋偶数值,
   for(var i=1;i<=30;i++){
       arr.push(i*2);
   }
   console.log(arr);

   //2)、按顺序每5个求一次平均值 放在另一个数组并输出。
   var sum = 0; //保存求和结果
   var arr2=[]; //保存平均值的数组
   for(var i=0;i<arr.length;i++){
        //求和
       sum=sum+arr[i];

       if((i+1)%5==0){//看看有没有够5个
          var avg = sum/5; //求平均值
          arr2.push(avg); //把平均值放入数组
          sum = 0; //保证下次的五个数求和之前,是从0开始求和的。
       }
       
   }
     console.log(arr2);
}

运行结果:
在这里插入图片描述

2. 编写函数map(arr) 把数组中的每一位数字都增加30%,并返回一个新数组;
// 一、定义函数
// 功能:把数组的每个元素的值增加30%;
// 参数:数组
// 返回值:是新的数组(增加了30%后的结果)

function map(arr){
    var newArr = [];
    for(var i=0;i<arr.length;i++){
        newArr.push(arr[i]*1.3); //arr[i]*1.3 就是: arr[i]+arr[i]*0.3
    }
    return newArr;
}

//二、调用函数

var arr = [1,2,3,4];
var t = map(arr);

console.log(t);

运行结果:
在这里插入图片描述

3. 有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
var n = 5  // 要插入函数的数
    var arr = [1,2,3,4,6,7,8,9]
    for(var i=0;i<=arr.length;i++){
        if(n<arr[i]){
            arr.splice(i,0,n); // i 插入数组的下标  0 不需要删除  n 插入的数
            break;
        }
    }

console.log(arr);

运行结果:
在这里插入图片描述
第二种方法:

// 一、定义函数

// 功能:有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
// 参数:
//      有序数组(从小到大)
//      要插入的数

// 返回值:插入新数的数组。

// 举例来说明题意:
// 原始的数组是:  [12,23,34,45,56]  注意:有序,从小到大的顺序
// 要插入的数:     30;
// 结果是: [12,23,30,34,45,56]

function insert(arr,num){
    // 这个需求的前提是数组是有序的,即:参数arr是有序的
    // 1、先找到要插入的位置
    var t=arr.length;//用t变量来保存要插入的位置,赋值为arr.length 是放置t比数组arr所有的元素都大。
    for(var i=0;i<arr.length;i++){
        if(num<arr[i]){//因为是从小到大排序,找到第一个比num大的数,那么 i就是要插入的位置
            t = i;
            break;
        }
    }
    
    // 2、插入(使用splice函数再数组中间插入数字)
    arr.splice(t,0,num);//在下标t处删除0个元素,然后在下标t处插入num
  
    return arr;
}

//二、调用函数

var arr = [12,23,34,45,56];
var t = insert(arr,30);
console.log(t);

运行结果:
在这里插入图片描述
第三种方法:

// 一、定义函数

    // 功能:有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
    // 参数:
    //      有序数组(从小到大)
    //      要插入的数

    // 返回值:插入新数的数组。

    // 举例来说明题意:
    // 原始的数组是:  [12,23,34,45,56]  注意:有序,从小到大的顺序
    // 要插入的数:     3;
    // 结果是: [3,12,23,,34,45,56]

    // 方法二:循环数组的同时,找到合适的位置直接插入
    //         注意:要注意,插入的数比数组中最后一个数还大的情况

    function insert(arr, num) {
        if (num > arr[arr.length - 1]) {//如果插入的数num比最后一个元素还大
            arr.push(num);
        } else {
            //循环数组的同时,找到合适的位置直接插入
            for (var i = 0; i < arr.length; i++) {
                if (num < arr[i]) {
                    arr.splice(i, 0, num);
                    break;
                }
            }
        }
        return arr;
    }

    //二、调用函数

    var arr = [12, 23, 34, 45, 56];
    var t = insert(arr, 3);

    console.log(t);

运行结果:
在这里插入图片描述

4. 编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组
 <input type="button" value="测试" onclick="testf()" />
function testf(){
    var arr = noRepeat([1,2,4,2,3,5]);
    console.log(arr);
}

//功能:数组去重
//参数:数组
//返回值:去重后的数组

// 举例说明题意:
//原始数: 1,2,3,4,3,3,2,5
//执行函数后的结果是: [1,2,3,4,5]

function noRepeat(arr){
    var arr2=[];//保存去重后的结果
    for(var i in arr){
        //判断arr[i]在arr2里是否存在
        if(has(arr2,arr[i])!=true){
            arr2.push(arr[i]); 
        }
    }
    return arr2;
}

//功能:判断一个数在数组中是否存在:
//参数:数组,一个数
//返回值:true:存在;false:不存在
function has(arr,n){
    for(var i in arr){
        if(arr[i]==n){
            return true;
        }
    }
    return false;
}

运行代码:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值