JavaScript Array模擬C#list RemoveAll實現刪除符合條件的元素

作爲一個跨平臺多語言編程愛好者的我來說,當我用了一次C#list 的linq的RemoveAll後,再敲JavaScript 的數組想也用這個方法才發現這語言壓根是弱爆了,不得已準備自己實現一下JS的Array的幾個刪除數據的方法。

注意:有不少網友採用的是逆向思維,從原數組提取出符合條件的數組的方式來規避JS Array 沒提供linq那樣RemoveAll,但是這會導致多一次內存開闢,而且原數組沒有改變,

並非最優解 

JS中Array 刪除元素,主要利用原生Array的函數Array.splice

splice函數可以說是一個功能全面的函數

定義和用法

splice() 方法用於插入、刪除或替換數組的元素。

語法

arrayObject.splice(index,howmany,element1,.....,elementX)
參數 描述
index

必需。規定從何處添加/刪除元素。

該參數是開始插入和(或)刪除的數組元素的下標,必須是數字。

howmany

必需。規定應該刪除多少元素。必須是數字,但可以是 "0"。

如果未規定此參數,則刪除從 index 開始到原數組結尾的所有元素。

element1 可選。規定要添加到數組的新元素。從 index 所指的下標處開始插入。
elementX 可選。可向數組添加若干元素。

splice應用例子

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")
arr.splice(1,1,"William")
document.write(arr + "<br />")
//結果如下
/*
George,John,Thomas,James,Adrew,Martin
George,William,Thomas,James,Adrew,Martin
*/
我們該怎麼利用splice,很簡單我們我對準數組索引index,然後arr.splice(index,1)這樣一個一個刪就行但是要注意,沒刪除一個元素後面的元素索引自動往前對齊,數組長度也會減小,那麼看到這廢話不多說,直接上代碼,絕對好用包你滿意,大笑.

Array.prototype.RemoveAll = function (func) {
    var arr = this;
    var len = arr.length;
    if (func == undefined) { alert("數組RemoveAll參數不能爲空"); return; }
    for (var i = 0; i < len; i++) {
        var entity = arr[i];
        var result = false;
        if (func && func(entity) === true) {
            arr.splice(i, 1);
            len--;
            i--;
        }
    }
}
用法超級Easy

var arr = new Array(6)
arr[0] = {name:"George",age:11};
arr[1] = {name:"John",age:11}";
arr[2] = {name:"Thomas",age:11}";
arr[3] = {name:"James",age:17}";
arr[4] = {name:"Adrew",age:18}";
arr[5] = {name:"Martin",age:19}";

//下面開始移除arr中年齡<18歲的未成年的小夥伴

arr.RemoveAll(function(obj){   return obj.age<18;  });//只要一句話,沒錯就是這麼簡單





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章