今天在寫一個混合開發版的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