JS数组练习

数组基本知识

改变原数组(7个)

1、push(),在数组后面添加元素

 

2、pop(),剪切数组的最后元素

不需要传入参数,传入也没用

3、shift( ),减去前面的元素

4、unshift( ),在前面添加元素

5、splice(),截取数组元素

6、reverse(),反转

7、sort(),升序排序,按ASCII码来排列的

从小到大排序后的数组 = 数组.sort(function(a,b){

            return a-b;

});

  • 无参:按照数组元素的首字符对应的Unicode编码值,从小到大排列数组元素。

  • 带参:必须为函数(回调函数:callback)。这个回调函数中带有两个参数,代表数组中的前后元素。

    • 如果返回值(a-b)为负数,a排b前面。

    • 如果返回值(a-b)等于0,不动。

    • 如果返回值(a-b)为正数,a排b后面。

上面的这个带参的排序,其实是调用了底层的冒泡排序,小的排前面,大的排后面。

PS:sort方法的功能非常强大,能对数字和字母进行排列。

升序

降序

 

排对象也是可以的,按字节排序。

 

不改变原数组(5个)

1、concat(),拼接数组

2、join(),连接数组内部元素,必须加字符串,虽然直接加数字也可以

3、split(), 把一个字符串分割成字符串数组

4、toString(),数组元素

 

5、slice(),截取数据

不传入参数就是整体截取,1个参数就是从该处开始截取到尾部

实例

查找数组中的指定元素,并返回索引值

<script>
    var arr = [1,2,3,6,8];
    function indexOf(arr,item) {
        if (Array.prototype.indexOf){ //这里是考虑其兼容性问题,如果没有该方法原型的话就采取循环去自己处理
            return arr.indexOf(item);
        }else{
            for (var i = 0; i < arr.length; i++){
                if (arr[i] === item){
                    return i;
                }
            }
        }
    }
    indexOf(arr,3);
</script>

数组求和

<script>
    var arr = [1,2,3,6,8];
    function sum(arr) {
            var n = 0;
            for (var i = 0; i < arr.length; i++){
                n += arr[i];
            }
            return n;
    }
    console.log(sum(arr)); //20
</script>

移除指定元素

<script>
    // 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
    var arr = [1,2,3,6,8];
    function remove(arr,item) {
        var n = 0;
        var arr1 = [];
        for (var i = 0; i < arr.length; i++){
            if (arr[i]!= item){
                arr1.push(arr[i]);
            }
        }
        return arr1;
    }
    console.log(remove(arr,3)); //

    //移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
    var arr = [1,2,3,6,8];
    function remove(arr,item) {
        for (var i = 0; i < arr.length; i++){
            if (arr[i] === item){
                arr.splice(i,1);
                i--;
            }
        }
        return arr;
    }
    console.log(remove(arr,3)); //

</script>

添加和删除元素

<script>
    //在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
    var arr = [1,2,3,6,8];
    function append(arr,item) {
        var arr1 = arr.slice(0);
        arr1.push(item);
        return arr1;
    }
    console.log(append(arr,3)); //

    //删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
    var arr = [1,2,3,6,8];
    function del(arr) {
        var arr1 = arr.slice(0);
        arr1.pop();
        return arr1;
    }
    console.log(del(arr)); //

    //在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
        var arr = [1,2,3,6,8];
        function append(arr,item) {
            var arr1 = arr.slice(0);
            arr1.unshift(item);
            return arr1;
        }
        console.log(append(arr,3)); //

    //删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
        var arr = [1,2,3,6,8];
        function del(arr) {
            var arr1 = arr.slice(0);
            arr1.shift();
            return arr1;
        }
        console.log(del(arr)); //

    //合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
    var arr1 = [1, 2, 3, 4];
    var arr2 = ['a', 'b', 'c', 1];
    function concat( ) {
        var arr = arr1.concat(arr2);
        return arr;
    }
    console.log(concat(arr1,arr2));

    //在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
    var arr = [1, 2, 3, 4];
    function insert(arr, item, index) {
            var arr1 = arr.slice(0);
            arr1.splice(index,0,item);
            return arr1;
    }
    console.log(insert(arr,5,2));  // 1,2,5,3,4


</script>

数组或字符串去重

<script>
//第一种
    var str = "abcdedddffhssjssjssksk";
    var arr = str.split("");
//    var arr = ['ss','ss','aa','aa','b','f'];
    Array.prototype.unique = function () {
        var temp = {};
        var arr = [];
        var len = this.length;
        for (var i = 0; i < len; i++) {
            if (!temp[this[i]]) {
                temp[this[i]] = 'a';//如果里面没有这个属性名的话,就添加进去
                arr.push(this[i]);
            }
        }
        return arr.join('');
    }

//第二种
//        问题:编写一个方法去掉一个数组中的重复元素。
//        分析:创建一个新数组,循环遍历,只要新数组中有老数组的值,就不用再添加了。
        var arr = [1,2,3,4,5,2,3,4];
        console.log(arr);
        var aaa = fn(arr);
        console.log(aaa);
        //思路:创建一个新数组,循环遍历,只要新数组中有老数组的值,就不用再添加了。
        function fn(array){
            var newArr = [];
            for(var i=0;i<array.length;i++){
                //开闭原则
                var bool = true;
                //每次都要判断新数组中是否有旧数组中的值。
                for(var j=0;j<newArr.length;j++){
                    if(array[i] === newArr[j]){
                        bool = false;
                    }
                }
                if(bool){
                    newArr[newArr.length] = array[i];
                }
            }
            return newArr;
        }
 
//第三种
function duplicates(arr) {
     var a = [],b = [];
     //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1
     for(var i = 0; i < arr.length; i++){
         if(!b[arr[i]]){
             b[arr[i]] = 1;
             continue;
         }
         b[arr[i]]++;
     }
     //遍历b数组,将其中元素值大于1的元素下标存入a数组中
     for(var i = 0; i < b.length; i++){
         if(b[i] > 1){
             a.push(i);
         }
     }
     return a;
}
    </script>

 

posted @ 2018-09-10 08:07  沉浮乡土  阅读(359)  评论(0编辑  收藏  举报