今天在写一个混合开发版的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

最新文章

  1. 5.0 JS中引用类型介绍
  2. 以application/json 方式提交 然后用在php中读取原始数据流的方式获取 在json_encode
  3. js单选和复选框
  4. (练习)rational rose进行用例图设计
  5. jquery实现导航栏跟随窗口滚动
  6. URAL 1297 Palindrome(后缀数组+ST表)
  7. 动态规划——最长公共子序列(LCS)
  8. 写一个Vue loading 插件
  9. LibVLC自定义插件目录,获取FPS方法
  10. 《java入门第一季》之面向对象多态面试题(多态收尾)
  11. richedit缩放
  12. Linux内存分配小结--malloc、brk、mmap【转】
  13. [20171130]关于rman备份疑问.txt
  14. 学生与部门管理app-产品功能与界面的简单设计
  15. 【转】19个必须知道的Visual Studio快捷键
  16. 硬盘SMART参数解释
  17. 设计模式(四) Factory Pattern工厂模式
  18. 【转】Windows守护进程的一种简单实现
  19. yum小结
  20. pandas读取csv数据时设置index

热门文章

  1. Verilog HDL的程序结构及其描述
  2. JVM常用启动参数
  3. LeetCode题解 343.Integer Break
  4. 一步一步学Vue(九)
  5. opnet仿真过程中SEED的概念问题 分类: opnet 2014-11-02 15:25 69人阅读 评论(0) 收藏
  6. openstack中使用linux_bridge实现vxlan网络
  7. if else 和switch case以及continue,break的区别
  8. github 发布项目
  9. Python实现单词查询&amp;文件查找
  10. [技术] OIer的STL入门教程