slice、splice、filter、map、forEach、concat方法

第一题 查找数组元素的位置

1.indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

如果要检索的字符串值没有出现,则该方法返回 -1。

语法:stringObject.indexOf(item)   //stringObject为数组或字符串;item为要检测的字母或子字符串

第二题 数组求和

1、不考虑算法复杂度,递归

slice() 方法可从已有的数组中返回选定的元素。 
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

array.slice(start, end)   // 不包含end

function sum(arr) {
    var len = arr.length;
    if(len == 0) 
        return 0;
    else if(len == 1)
        return arr[0];
    else
        return arr[0] + sum(arr.slice(1));
}

 2.遍历求和

function sum(arr) {
    var sum = 0;
    for(var i = 0; i < arr.length; i++){
        sum += arr[i];
    }
    return sum;
}

第三题:移除数组中的元素,不要直接修改数组 arr,结果返回新的数组

push()向数组的末尾添加一个或多个元素,并返回新的长度。

function remove(arr, item) {
     var a = [];
     for(var i=0; i < arr.length; i++){
         if(arr[i] != item){
             a.push(arr[i]);
         }
     }
     return a;
}

第四题:移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回

slice() 方法可从已有的数组中返回选定的元素。

该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。

function removeWithoutCopy(arr, item) {
    while (arr.indexOf(item) !=- 1) {
        arr.splice(arr.indexOf(item),1);
    }
    return arr;
}

用while循环判断item 是否存在,若存在则删除,若不存在,则return arr.

比较

splice()方法也是一个强大的数组方法!!!主要用途是:向数组的中部插入项。

1、删除,指定2个参数:要删除的第一项的位置和要删除的项数。

如:splice(0,2)会删除数组中的前两项。

2、插入,指定3个传参数:起始位置、0(要删除的项数)、要插入的项。

如:splice(2,0,"red","green")从位置2开始插入字符串。

3、替换向指定位置插入项,并删除指定位置的项。指定3个参数:起始位置、要删除的项数、要插入的项。

如:splice(2,1,"red","black")删除位置2的项并从位置2 开始插入字符串。

第五题:在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组

1.slice(0)浅拷贝,表示将数组拷贝一次

如果slice()方法只有一个参数,表示返回从该参数指定位置开始到数组末尾的所有项;

若有两个参数,返回从第一个参数指定位置到第二个参数指定位置,但不包括结束位置项。

该方法不会影响原始数组

function append(arr, item) {
    var newArr = arr.slice(0);  
    newArr.push(item);
    return newArr;
}

第六题:删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组

unction truncate(arr) {
    return arr.slice(0,arr.length-1);
}

第七题:在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组

1.concat() 方法用于连接两个或多个数组。

该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

function prepend(arr, item) {
    return [item].concat(arr);
}

第八题:统计数组 arr 中值等于 item 的元素出现的次数

1.遍历的方法

function count(arr, item) {
    var acount = 0;
    for (var i=0; i<arr.length; i++) {
        if (arr[i] == item) {
            acount++;
        }
    }
    return acount;
}
2.filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测。

注意: filter() 不会改变原始数组。

function count (arr, item ) {
    var count = arr. filter(function(a) {
        return a === item ; //返回true的项组成的数组, a表示当前元素的值
    });
    return count.length;
}

3.map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

注意: map() 不会对空数组进行检测。

注意: map() 不会改变原始数组。

function count(arr,item){

   var count = 0;

   arr.map(function(a){

       if (a == item) {

       count++

       }

   });

}

第九题:找出数组 arr 中重复出现过的元素

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

注意: forEach() 对于空数组是不会执行回调函数的。

lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

function duplicates(arr) {
    var result = [];
    arr.forEach(function(e){
        if(arr.indexOf(e) != arr.lastIndexOf(e) && result.indexOf(e) ==-1){   // result.indexOf(e) ==-1  避免新数组中数据重复
            result.push(e);
        }
    });
    return result;
}

第十题:为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组

function square(arr) {
    return arr.map(function(item){
        return item*item;
    })
}

function square(arr){
    var a = [];
    arr.forEach(function(e){
        a.push(e*e);
    });
    return a;
}

猜你喜欢

转载自blog.csdn.net/Judy_qiudie/article/details/82182431