【譯】JS基礎算法腳本:類數組(arguments)去重

需求

給出一個類數組,刪除要求的重複數據,返回新數組數組

destroyer([1, 2, 3, 1, 2, 3], 2, 3) should return [1, 1]
destroyer([2, 3, 2, 3], 2, 3) should return []
destroyer(["tree", "hamburger", 53], "tree", 53) should return ["hamburger"]

思路1

1.類數組轉化成數組
2.雙重循環比較兩個數組的元素
3.刪除重複數據
4.剔除非Boolean數據函數

function destroyer(arr) {
    var args = Array.from(arguments).slice(1);
    for(var i=0; i<arr.length; i++) {
        for(var j=0; j<args.length; j++) {
            if(arr[i] === args[j]) {
                delete arr[i];
            }
        }
    }
    
    return arr.filter(Boolean);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

思路2

1.類數組轉化成數組
2.fiter()方法返回不重複數組測試

function destroyer(arr) {
    var args = Array.from(arguments).slice(1);
    return arr.filter((val) => !args.includes(val));
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

相關

arguments(類數組轉換成數組),如下方法均可以
let args = Array.prototype.slice.call(arguments); 
let args = [].slice.call(arguments);
let args = Array.from(arguments);
let args = [...arguments];
arr.filter(callback[, thisArg])
  • filter() 方法建立一個新數組, 其包含經過所提供函數實現的測試的全部元素。

參數:this

  • callback
    用來測試數組的每一個元素的函數。調用時使用參數 (element, index, array)。返回true表示保留該元素(經過測試),false則不保留。
  • thisArg
    可選。執行 callback 時的用於 this 的值。
  • 返回值
    一個新的經過測試的元素的集合的數組

描述:prototype

  • filter 爲數組中的每一個元素調用一次 callback 函數,並利用全部使得 callback 返回 true 或 等價於 true 的值 的元素建立一個新數組。callback 只會在已經賦值的索引上被調用,對於那些已經被刪除或者從未被賦值的索引不會被調用。那些沒有經過 callback 測試的元素會被跳過,不會被包含在新數組中。

有其餘好的方法或思路的道友,不妨在沙發區神交一番。code

相關文章
相關標籤/搜索