【前端】js中數組對象根據內容查找符合的第一個對象


 今天在寫一個混合開發版的app,其中一個功能是掃描快遞單號,客戶要求不能掃描重復的快遞單號!所有就驗證查出。

首先實現思路就是:

       1.定義一個全局數組變量:var nubList = [];

       2.進入該掃描頁面先查找已掃描的數據。

       3.掃描快遞單號成功回調里根據當前掃描結果查重。存在擇提示已存在。不存在擇進行添加快遞單列表。

這就是一個簡單的實現思路。本篇不是一個什么記錄就是一個隨筆記錄。

以前我查重大多是使用循環進行遍歷對比。下面是我這次使用的數組示例find方法。

數組示例find:用於查找數組中第一個符合條件的對象返回。其實實現原來也是每個數組元素對比遍歷,這個方法傳進去一個回調函數,元素依次調用回調函數(可能看起來爽吧)。

var nubList = [{
expressId: "00001", //快遞單號ID
expressNum: "數據1"
},
{
expressId: "00002", //快遞單號ID
expressNum: "數據2"
},
{
expressId: "00003", //快遞單號ID
expressNum: "數據3"
},
{
expressId: "00004", //快遞單號ID
expressNum: "數據4"
},];

//增加單號查重操作
if(nubList.find(function(x) {
return x.expressId == result;
}) != undefined) {
mui.alert("該快件已經錄入!", function() {
//重新開啟繼續掃描
scan.start();
})
return;
}

注意其中nubList.find(function(x) {return x.expressId = result;}) 就是查詢結果了。如果查詢不到擇返回undefined

小技巧: 

最后我在補充幾個小方法(從官網看到的比較常用的):

findIndex:查找第一個符合元素的位置(注意是位置不是元素);arr.findIndex(v,index,arr){}

reverse:將數組元素位置倒置。簡單來說就是反轉一下,第一個成最后一個,最后一個成第一個。

join:將數組連接到一個字符串中。此方法也可以傳入分割參數

	var a=["one","two","three"]
	a.join("|");
	//"one|two|three"  結果

splice:在指定位置添加/修改元素;簡單理解就是沒有就添加,存在就刪除替換調。arr.splice(開始位置,移除數目,元素)

push:再遠末尾插入元素。

擴展數組根據指定元素刪除:

 //擴展數組刪除
                                Array.prototype.indexOf = function (val) {
                                    for (var i = 0; i < this.length; i++) {
                                        if (this[i] == val) return i;
                                    }
                                    return -1;
                                };

                                Array.prototype.remove = function (val) {
                                    var index = this.indexOf(val);
                                    if (index > -1) {
                                        this.splice(index, 1);
                                    }
                                };

2018-07-31補充

今天再次使用到這個方法,但是不同的是我需要在ie下進行兼容測試,不幸的是還真的就不通過,提示“對象不支持“find”屬性或方法”。不行那就不用吧,我們換個:filter

在數組處理上filter和find實現的功能是類似的。所有如果是在ie下使用請切換成filter方法:nubList.filter(function(x) {return x.expressId = result;}) 

在元素篩選上filter是對自身的查找,find是對子集的查找。例如:

            <div class="css">
                <p class="test">測試1</p>
            </div>
            <div class="test">
                <p >測試2</p>
            </div>

 

然后分別查詢:

filter=>$("div").filter(".test") 輸出結果是:“<p >測試2</p>”

find=>$("div").filter(".test") 輸出結果是:測試1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM