语法:

_.filter(list, predicate, [context])

说明:

对list集合的每个成员依次进行匹配(根据predicate迭代函数检测),返回匹配成功的集合

  • list可以为数组,对象,字符串和arguments
  • predicate会传第三个参数value, key, list(参数名可自定义)
  • predicate函数需要返回值
  • context可以改变predicate函数内部的this

代码示例:

示例一:filter对数组,对象,字符串,arguments进行操作并返回匹配成功的数据

var result;// 操作数组
result = _.filter([1, 2, 3], function (value) {return value % 2 === 1;
});
console.log(result) //=> [1, 3]// 操作对象
result = _.filter({ one: '一', two: '二', three: '三', num: 123, bool: false }, function (value) {return typeof value === "string";
});
console.log(result) //=> ["一", "二", "三"]// 操作复杂的对象
var obj = {levelA: {level0: 'level0',level1: 'level1'},levelB: '一',levelC: 1,levelD: {level3: 'level3'}
}
result = _.filter(obj, function (value) {return typeof value === "object";
});
console.log(result) //=> [{level0: "level0", level1: "level1", {level3: 'level3'}}]// 操作字符串(此处将字符拆分为数组)
result = _.filter('123', function (value) {return value === '2' || value === '3';
});
console.log(result) //=> ["2", "3"]//操作arguments
function abc() {result = _.filter(arguments, function (value) {return value % 2 === 1;});console.log(result); //=> [1, 3]
}
abc(1, 2, 3);

示例二:predicate函数传递的参数(函数内部需要return返回值,否则返回[])

var result;//数组的情况
result = _.filter([1, 2, 3], function (value, key, list) {console.log(value, key, list);//=> 1 0 [1, 2, 3]//=> 2 1 [1, 2, 3]//=> 3 2 [1, 2, 3]
});
console.log(result) //=> []//对象的情况
result = _.filter({one: '一', two: '二', three: '三'}, function(value, key, list){console.log(value, key, list);//=> 一 one Object {one: "一", two: "二", three: "三"}//=> 二 two Object {one: "一", two: "二", three: "三"}//=> 三 three Object {one: "一", two: "二", three: "三"}
});
console.log(result) //=> []

示例三:context可以改变predicate内部的this

var result;// 数组的情况
result = _.filter([1, 2, 3], function (value, key, list) {console.log(this); //=> [1, 2, 3] this是数组
}, [1, 2, 3]);// 对象的情况
result = _.filter([1, 2, 3], function (value, key, list) {console.log(this); //=> Object {no: 10} this是对象
}, { "no": 10 });// 字符串的情况
result = _.filter([1, 2, 3], function (value, key, list) {console.log(this); //=> String {0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue]]: "123"}//   this是将字符串拆分后的对象
}, "123");

_.select的功能和_.filter是一样的

var result = _.filter([1, 2, 3], function (value, key, list) {return value % 2 === 1;
});
console.log(result) //=> [1, 3]

特殊情况

示例一:list的特殊情况

//例如:null,undefined,0,true,this等;
var result = _.filter(null, function (value, key, list) {return true;
});
console.log(result) //=> []

示例二:predicate函数的this为window全局对象的情况

// 例如:null,undefined,window,this等
var result = _.filter([1, 2, 3], function (value, key, list) {console.log(this); //=> this是window全局对象
}, null);

list参数可为真假值?

var  result = _.filter([1, true, '1', 0, undefined, null]);
console.log(result) //=> [1, true, "1"]

predicate还有其他写法?

示例一:predicate参数为空的时候

var  result = _.filter({x: 1, y: 2});
console.log(result) //=> [1, 2]

示例二:predicate参数为一个字符的时候

var  result = _.filter([{x: 1}, {y: 2}], 'x');
console.log(result) //=> [{x: 1}]

示例三:predicate参数为对象的时候

var obj = [{x: 1, y: 2},{x: 1},{y: 2, z: 3}
]
var  result = _.filter(obj, {x: 1});
console.log(result) //=> [{x: 1, y: 2},{x: 1}]

转载于:https://www.cnblogs.com/rechel/p/7615130.html

underscorejs之_.filter(list, predicate, [context])相关推荐

  1. underscorejs之 _.indexBy(list, iteratee, [context])

    语法 _.indexBy(list, iteratee, [context]) 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 的iterator 函数(或属性名), 返回一个每一项 ...

  2. Scala Array中_ filter map的用法示例

    object S {def main(args: Array[String]): Unit = {println("scala")val arr: Array[Int] = Arr ...

  3. underscore-1.8.3.js 源码解读全文注释版

    // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud an ...

  4. underscore

    underscore 下划线 underscore提供了一套完善的函数式编程的接口.underscore在加载时,会把自身绑定到唯一的全局变量_上,类似jquery把自身绑定到$上一样.这也是名字叫u ...

  5. 从零开始的全栈工程师——underscore

    underscore 是js封装的一个js库 库和框架是有区别的 mvc框架就是backbone就是依赖这个库 underscore就是定义了一个_( 下划线对象 ); 函数库的所有的方法都归属于这个 ...

  6. Underscore.js (1.7.0)-集合(Collections)(25)

    稽核函数(数组或对象) each_.each(list, iteratee, [context]) 别名: forEach  遍历list中的所有元素,按顺序用遍历输出每个元素.如果传递了contex ...

  7. underscore.js 页面数据渲染

    1.underscore.js  源码 // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashken ...

  8. 常用JS库源码 - store.js源码/underscore.js源码

    常用JS库源码 Store.js源码 "use strict" // Module export pattern from // https://github.com/umdjs/ ...

  9. node 工具模块lodash

    _.chunk(3.0.0) _.chunk(array,[size=1]):将一个数组分成相同长度的几个数组,不够均匀分配的单独成为一个数组. 参数: array(Array):要进行拆分的数组 [ ...

最新文章

  1. 在CentOS 6.3 64bit上安装libunwind库
  2. python链表添加多个值_Python基础10之数据结构(下)
  3. mssql sqlserver 对不同群组对象进行聚合计算的方法分享
  4. mysql navicat 设计表_Navicat for MySQL 如何设计报表版面
  5. Rabbitmq消息发送事务与确认机制
  6. web python selenium自动化面试题_干货分享 | Selenium 自动化测试相关的面试题
  7. Spark Mllib里的如何对单个数据集用斯皮尔曼计算相关系数
  8. 将ubuntu的apache2修改成https链接
  9. Fuel 9.0安装Openstack网络验证失败解决
  10. LeetCode【709. 转换成小写字母】
  11. 快速批量打印工程图,这个工具少不了
  12. Centos搭建socks5代理服务器
  13. 微信视频聊天怎么美颜?以下方法可以帮到你!
  14. 第一次尝试使用Python创建季节性ARIMA模型
  15. 谈谈数独(Sudoku)
  16. echarts实现饼图阴影,改变饼图的颜色,改变引导线的颜色
  17. 浏览量比较大的网站应该从哪几个方面入手
  18. AMiner权威发布区块链大数据报告(附下载)
  19. 考研线性代数深入理解
  20. zabbix报警-邮件-钉钉

热门文章

  1. Pycharm取消双击shift出现搜索框
  2. git学习(七)新建远程仓库-Gitee为例
  3. python利用什么写模板_利用python自动生成verilog模块例化模板
  4. mysql 查询一个数据库里面有多少张数据表
  5. 一道求因子之和面试算法题
  6. could not insert:
  7. java中replaceall用法_Java中String的ReplaceAll使用小结
  8. sap 供应商表_汐帆科技告诉你SAP 为何是企业最优先的选择?
  9. python如何打印文字_python怎么打印字符
  10. emq与mysql_EMQ X 插件持久化系列 (五)MySQL MQTT 数据存储