JavaScript中数组总结

77 阅读2分钟

www.nowcoder.com/ta/js-asses…

www.sojson.com/runjs.html

  • 计算给定数组 arr 中所有元素的总和

    // 最初的垃圾写法
    function sum(arr) {
        let sum = arr.reduce((prevValue, item) => {
            return prevValue + item;
        })
        return sum;
    }
    ​
    function sum(arr) {
        return arr.reduce((prevValue, item) => {
            return prevValue + item;
        })
    }
    
  • 找出元素 item 在给定数组 arr 中的位置

    // 所有的
    function indexOf(arr, item) {
        let storage = [];
        for(let i of arr) {
            if(arr[i] === item) {
                storage.push(i)
            }
        }
        if(storage.length == 0) {
            storage = -1;
        }
        return storage.toString();
    }
    
  • 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回

    方法一:// 如果用splice删除,会影响arr序列,可以从后往前删除
    function removeWithoutCopy(arr, item) {
        for(i=arr.length-1;i>=0;i--) {
           if(arr[i]==item) {
              arr.splice(i,1);
           }
        }
        return arr;
    }
    方法二: 从后边添加,从前边删除
    function removeWithoutCopy(arr, item) {
        var n=arr.length;
         for(var i=0;i<n;i++){
             if(arr[0]!==item){
                 arr.push(arr[0]);
             }
             arr.shift();
        }
        return arr;
    }
    ​
    > Array [1, 2, 2, 3, 4, 2, 2]
    > Array [1, 2, 2, 3, 4, 2, 2, 1]
    > Array [2, 2, 3, 4, 2, 2, 1]
    > Array [2, 2, 3, 4, 2, 2, 1]
    > Array [2, 3, 4, 2, 2, 1]
    > Array [2, 3, 4, 2, 2, 1]
    > Array [3, 4, 2, 2, 1]
    > Array [3, 4, 2, 2, 1, 3]
    > Array [4, 2, 2, 1, 3]
    > Array [4, 2, 2, 1, 3, 4]
    > Array [2, 2, 1, 3, 4]
    > Array [2, 2, 1, 3, 4]
    > Array [2, 1, 3, 4]
    > Array [2, 1, 3, 4]
    > Array [1, 3, 4]
  • 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组

    function remove(arr, item) {
        return arr.filter((i) => {
            return i!==item
        });
    }
    
  • 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组

    // 方法一:
    function append(arr, item) {
        return arr.concat([item])
    }
    ​
    // 方法二: push方法返回的是数组长度,所以没办法连写。 splice返回被删除的项目
    function append(arr, item) {
        let arr2 = arr.slice(0);
        arr2.push(item)
        return arr2;
    }
    ​
    1. slice(0) 是浅拷贝
    2. 
    
  • 改变数组:

    - arr.splice()
    - arr.reverse()
    - arr.fill()
    - arr.copyWithin()  // 方法用于从数组的指定位置拷贝元素到数组的另一个指定位置中。
    - arr.sort()
    - arr.push()
    - arr.pop()
    - arr.unshift()
    - arr.shift()
    
  • 不改变数组:

    - concat
    - join
    - slice
    - map,filter,some,every
    

\