分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

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

发布时间:2023-09-06 01:15责任编辑:熊小新关键词:js

 语法:

_.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"]//操作argumentsfunction 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}]

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

原文地址:http://www.cnblogs.com/rechel/p/7615130.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved