最重要的是二维数组

小程序通讯录(student)

后台的数据格式

wxml
<input bindconfirm="search" bindinput="bindinput" confirm-type="搜索" class="wxSearch-input" placeholder="姓名" />

js

正式版顺序搜索算法
先来说几个坑:
1>比如 var field = "user";
item.field 就会报错,写法只能为item[field]
2>比如type为number的时候,管理员没有这个number字段,所以
item[field][i][type[j]].indexOf(value)就会报错,所以要再上面判断一层,underfind的时候把他绕过去,增加一条
if (item[field][i][type[j]] != undefined || item[field][i][type[j]] != null)

/*二维数组对象模糊搜索dataList 为二维数组数据结构value 为input框的输入值type 为指定想要搜索的字段名,array格式 ["name", "number"];field 为二维数组的字段 比如二维数组字段名为user*/
function filterData(dataList, value, type, field) {var s = dataList.filter(function(item, index, arr) {for (let i = 0; i < item[field].length; i++) {for (let j = 0; j < type.length; j++) {console.log(item[field][i][type[j]]);if (item[field][i][type[j]] != undefined || item[field][i][type[j]] != null) {if (item[field][i][type[j]].indexOf(value) >= 0) {var arr2 = [];var s = item[field].filter(function(items, indexs, arrs) {if (items[type[j]].indexOf(value) >= 0) {arr2.push(items);return arr2;}})item.user = s;return item;}}}}});return s;
}

第一版有点缺陷的算法

  bindinput: function (options) {var value = options.detail.value;value = value.replace(/^\s+|\s+$/g, "");this.setData({value: value})},search(e) {var value = this.data.value;var type = ["name","number"];if (value == "") {console.log("我是空");this.getData(this.data.id, this.data.type, "");}var li = this.filter(this.data.group, value, type);
//这里为搜索不到值得时候返回得空数组,就让他重新查一次
    console.log(li);if (li.length == 0) {this.getData(this.data.id, type, "");} else {this.setData({group: li})}},
//重头戏来了
/*dataList为上图图片得后台数据结构;value为input输入值;type为想查询得类型,比如name,number字段*/filter: function (dataList, value, type) {var s = dataList.filter(function (item, index, arr) {//item返回得是一维数组结构//下面遍历二维user数组对象for (let i = 0; i < item.user.length; i++) {//遍历type数组对象,判断下来要筛选的字段for (let j = 0; j < type.length; j++){//判断二维数组里面得name或者number得值里面包含value不;如果不包含返回-1就不继续执行if (item.user[i][type[j]].indexOf(value) >= 0) {var arr2 = [];//items返回得是二维数组结构得字段var s = item.user.filter(function (items, indexs, arrs) {//判断二维数组里面得name或者number得值里面包含value不;如果不包含返回-1就不继续执行//然后把二位里面得多个对象结果都存到新数组arr2去//然后返回二维得s过滤器if (items[type[j]].indexOf(value) >= 0) {arr2.push(items);return arr2;}})//这里得s得值为arr2,因为item为一维过滤器,实际在遍历种//所以item.user可以返回当前所对应得那一条数组,改变里面得二维值,为需要的item.user = s;//返回item,为过滤器筛选好了的给上一层sreturn item;}}}});//返回到search里面得li去接收return s;},

遇到的深坑

下图原因是因为没有加

if (items[type[j]].indexOf(value) >= 0) {}

下图原因是因为没有加

if (item.user[i][type[j]].indexOf(value) >= 0) {}

一维数组:

正式版一位数组:

var type = ["name", "id"];var dataList = [{ name: "蓝有",number: "1" },{ name: "蓝天", number: "2" },{ name: "李天一", number: "3" },{ name: "懒", number: "4" },]var value = "天";/*一维数组对象模糊搜索dataList 为一维数组数据结构value 为input框的输入值type 为指定想要搜索的字段名,array格式 ["name", "number"];*/
function filterOne(dataList, value, type) {var s = dataList.filter(function(item, index, arr) {console.log(item)for (let j = 0; j < type.length; j++) {if (item[type[j]] != undefined || item[type[j]] != null) {if (item[type[j]].indexOf(value) >= 0) {return item;}}}});return s;
}

var list = ["蓝有","蓝天",'李天一',"懒"];var list = [{name:"蓝有",id:1},{name:"蓝天",id:2},{name:"李天一",id:3},{name:"懒",id:4},]var len = list.length;var arr = [];for(var i=0;i<len;i++){//如果字符串中不包含目标字符会返回-1if(list[i].name.indexOf("天")>=0){console.log(list[i]);//{name: "蓝天", id: 2}   //{name: "李天一", id: 3}
                arr.push(list[i]);}}console.log(arr) ;//[0: {name: "蓝天", id: 2}//1: {name: "李天一", id: 3}]

转载于:https://www.cnblogs.com/lsc-boke/p/10997160.html

【干货】原生js做的一维数组对象,二维数组对象的模糊查询(前端网备份)...相关推荐

  1. java 二维数组 的方法和属性_Java一维数组和二维数组详解(Java必备知识)

    数组是最为常见的一种数据结构,分为一级数组,二维数组以及多维数组.是把相同数据类型的元素,用一个标识符封装到一起的基本类型数据序列或对象序列. 目录 一维数组 创建一维数组 给一维数组赋值 获取数组的 ...

  2. python输入数组_Python输入数组(一维数组、二维数组)

    一维数组: arr = input("") //输入一个一维数组,每个数之间使空格隔开 num = [int(n) for n in arr.split()] //将输入每个数以空 ...

  3. c语言bool怎么用_C语言中的一维数组和二维数组什么?怎么用?

    C++| 匠心之作 从0到1入门学编程[免费]​yun.itheima.com C语言除了基本数据类型之外,还提供了构造类型的数据,构造类型的数据包括数组类型.结构体类型和共用体类型.下面我们详细介绍 ...

  4. 【蓝桥杯Java_C组·从零开始卷】第四节、一维数组与二维数组

    整篇文章为对java数组的完整理解以及部分排序,并有一些简单的demo,经典的案例与蓝桥杯的一些经典数组题有专门的文章梳理. 目录 数组概述 什么是数组 数组的结构 数组的特点: 数组分类 一维数组声 ...

  5. EDUCoder编程练习题解(一维数组和二维数组)

    一维数组和二维数组 第1关:排序问题 任务描述 本关任务:将十个数进行从大到小的顺序进行排列. 输入 输入十个整数. 输出 以从大到小的顺序输出这个十个数. 测试说明 样例输入: 1 2 3 4 5 ...

  6. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))     二维数组(二维数组的遍历.排序.查找.定义 ...

  7. 如何利用一维数组实现二维数组的多列自由升降序排序过程详解

    如何利用一维数组实现二维数组的多列自由升降序排序过程详解 本例只说明多列排序的实现方式,一维数组的排序已经有过讲解不在赘述.所以本文是在已经完成了一维数组排序的函数封装的基础上完善多列排序的过程的详解 ...

  8. 数组(一维数组与二维数组)

    定义: 数组是构造数据类型之一 数组特点: 1.其中所有的元素具有相同的数据类型 2.两个元素之间的地址是连续的 3.一旦创建,不能改变大小 数组包括一维数组和二维数组 一维数组. 一维数组格式: 类 ...

  9. 【c++ 复健】从简单的做起,数组和二维数组

    [c++ 复健]从简单的做起,c++数组和二维数组 知识点主要是二维数组,一维数组直接建就行了. 静态的: type arrayName[array size]; 在堆里动态分配空间创的动态数组: d ...

  10. 【java基础】——一维数组和二维数组存储占用内存大小问题

    问题:在java中,一维数组和二维数组在数据量一样的情况下,开辟的内存大小是怎样的? 一.尝试阶段: 1.代码一: public class OneArrayMemory{public static ...

最新文章

  1. OpenCV图像处理常用手段
  2. 终结由安装SVN 导致的异常——visual studio 2010 遇到了异常,可能是由某个扩展导致
  3. linux ssh 报错 Write failed: Broken pipe 解决方法
  4. ar 微信小程序_微信AR玩法支持实现后,微信小程序会有想象空间吗?
  5. 给网页上加广告的一点感受
  6. og-bin=mysql-bin_TiDB Binlog 常见问题
  7. C# 使用阿里云发送短信
  8. 网络管理人员的未来?
  9. 中raise抛出异常_Python 异常处理知识点汇总,五分钟就能学会 !
  10. java语言中 负责并发编程的机制是_Java并发编程艺术-并发机制的底层原理实现...
  11. java 短地址_URL短地址压缩算法 微博短地址原理解析(再转与Java实现) | 学步园
  12. “RPC好,还是RESTful好?”,这个问题不简单!
  13. .Net Framework3.5离线安装
  14. YUI Compressor Maven
  15. 微信小程序拨号功能,调起手机拨号!
  16. linux下gzip用法,Linux gzip 命令的使用
  17. 【宽创案例】青海牦牛文化馆:走进牦牛之都!
  18. 怎么选聚氨酯减震弹簧万向轮
  19. 一个 Android 程序员的面试心得
  20. python用folium绘制地图并设置弹窗

热门文章

  1. mvc中循环遍历分配的代码
  2. Flex学习笔记(零)
  3. 电动力学每日一题 2021/10/12
  4. 使用PowerDesigner设计物理模型并运行脚本检查模型图解
  5. 关于VC++控制台输出中文乱码的问题
  6. VC++多文档实例编程分析
  7. Qt实现多国语言(即界面翻译)可实时进行切换
  8. 【转】Android 之最新最全的Intent传递数据方法
  9. Ffmpeg 定位文件(seek file)
  10. SQL Server里的INTERSECT