2.9 reject

2.9.1 语法:

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

2.9.2 说明:

前边我们已经学习了filter方法,那么我们在学习reject之前,先让我们来想一下reject和filter有什么关系呢?

filter返回一个的集合(匹配成功),reject是返回一个集合(匹配失败)

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

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

2.9.3 代码示例:

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

var result;

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

示例二:predicate函数传递的参数(函数内部需要return返回值,否则返回一个集合,此集合则是list集合的属性值)

var result;

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

2.9.4 特殊情况

示例一:list的特殊情况

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

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

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

2.9.5 list参数可为真假值?

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

2.9.6 predicate还有其他写法?

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

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

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

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

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

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

underscorejs-reject学习的更多相关文章

  1. 不学就吃亏的underscorejs类库学习示例 ——(集合篇)

    underscorejs是一个很不错的类库,我的很多项目都引用了这个类库,的确可以带来很多方便. 记得我当初学的时候,看underscorejs的api是看的一知半解的,甚至不明白api里的conte ...

  2. Javascript - Promise学习笔记

    最近工作轻松了点,想起了以前总是看到的一个单词promise,于是耐心下来学习了一下.   一:Promise是什么?为什么会有这个东西? 首先说明,Promise是为了解决javascript异步编 ...

  3. WeX5学习笔记

    目录 WeX5学习笔记... 1 1.轻松看透WeX5产品能力和技术... 1 2.WeX5可以怎么玩?... 3 一.纯本地App. 3 二.关联一个网站,希望默认就打开某页... 4 三.UI设计 ...

  4. SAE学习-使用SAE的Storage服务存储图片

    看到园子里面有同学写了一篇<基于PHP实现阿里云开放存储服务>,围观地址:http://www.cnblogs.com/nosqlcoco/p/3474773.html.想起自己也在Sin ...

  5. jQuery源代码学习之九—jQuery事件模块

    jQuery事件系统并没有将事件坚挺函数直接绑定在DOM元素上,而是基于事件缓存模块来管理监听函数的. 二.jQuery事件模块的代码结构 //定义了一些正则 // // //jQuery事件对象 j ...

  6. 【转载】学习资料存档:jQuery的deferred对象详解

    我在以前的文章里提到promise和deferred,这两个东西其实是对回调函数的一种写法,javascript的难点之一是回调函数,但是我们要写出优秀的javascript代码又不得不灵活运用回调函 ...

  7. backbone库学习-Collection

    backbone库的结构: http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文所有例子来自于http://blog.cs ...

  8. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q1-Q3)

    这里我把从网上搜集到的针对Sharepoint 70-576的有关练习进行系统的解析,整理成一个系列, 分期.分批次共享出来,供大家研究. 70-573考试注重的是"知道"相关知识 ...

  9. [转]向facebook学习,通过协程实现mysql查询的异步化

    FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php ...

  10. 【转】IPtables学习笔记

    写在前面,大家测试玩iptables时要记得自己配置了那些东西,测试完成后记得删除啊,博主忘了删除一个input REJECT链的一条记录,后续测试搭建了apache服务器,始终无法访问,最后抓包发现 ...

随机推荐

  1. 更改Visual Studio 2010/2012/2008的主题设置

    一.更改主题: 主题网站:http://studiostyl.es/ Visual Studio 2010发布也已经有一段时间了,不过安装后默认的白底的主题长时间看代码可能会感觉眼睛酸痛,况且时间长了 ...

  2. Qt入门(15)——使用窗口部件

    下面是如何创建一个你自己的窗口部件,描述如何控制一个窗口部件的最小大小和最大大小,并且介绍了窗口部件的名称. class MyWidget : public QWidget { public: MyW ...

  3. POJ 3468 A Simple Problem with Integers(详细题解) 线段树

    这是个线段树题目,做之前必须要有些线段树基础才行不然你是很难理解的. 此题的难点就是在于你加的数要怎么加,加入你一直加到叶子节点的话,复杂度势必会很高的 具体思路 在增加时,如果要加的区间正好覆盖一个 ...

  4. iconv gbk字符转utf8字符

    直接上代码 bool gbk2utf8(const char* src, char* dest, size_t inlen) { const char *inbuf = src; size_t out ...

  5. UNIX环境下的消息队列

    消息队列和共享内存一样,也是一种IPC对象.消息队列其实就是消息的链表,每一则消息都是用户自己的结构体.服务端这边创建消息队列,客户端这边打开消息队列,两个进程就可以进行通信.创建和打开消息队列使用函 ...

  6. Nodejs in Visual Studio Code 13.构建单页应用Scrat示例挖一挖

    1.开始 Scrat作者说要搞个很碉堡的示例,果然就搞出来了,如果要学习并使用Scrat,可以从官方示例开始,简直太方便了. 2.Scrat示例 目录 component_modules : 公共组件 ...

  7. Eclipse : 找不到或无法加载主类

    问题: 找不到或无法加载主类 解决思路: Step1: 去网上百度了下,基本上都说是环境变量的问题. 原因:环境变量设置有问题. 解决方法:重设环境变量 结果:当然问题没解决. Step2:再次百度, ...

  8. MAVEN 工程打包resources目录外的更多资源文件

    首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,ma ...

  9. mysql 循环插入100w

    use md5db; DROP PROCEDURE if exists myFunction; delimiter $$ CREATE PROCEDURE myFunction() BEGIN DEC ...

  10. 操作SharedPreferences的注意点

    如果使用SharedPreferences用于数据存取,大部分人喜欢使用如下代码: public void writeSharedprefs(int pos) { SharedPreferences  ...