2.10 every

2.10.1 语法:

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

2.10.2 说明:

对list集合的每个成员根据predicate进行真值检测,如果都通过真值检测则返回true

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

2.10.3 代码示例:

示例一:every对数组,对象,字符串,arguments与predicate进行真值检,如果都通过真值检测则返回true

var result;
// 操作数组
result = _.every([0, 10, 20], function (value) {
return value % 2 === 0;
});
console.log(result) //=> true // 操作对象
result = _.every({ one: '一', two: '二', three: '三', four: false }, function (value) {
return typeof value === 'string';
});
console.log(result); //=> false // 操作字符串(此处将字符拆分为数组)
result = _.every('123', function (value) {
return value !== '0' ? true : false;
});
console.log(result) //=> true //操作arguments
function abc() {
result = _.every(arguments, function (value) {
return value % 2 === 0;
});
console.log(result); //=> true
}
abc(0, 10, 20);

示例二:predicate会传递三个参数(value, key, list);函数内部需要return返回,否则直接返回false;

// predicate为不传值(且list集合里的内容全部为真值返回true,否则返回false)
var result;
result = _.every([1, 2, 3]);
console.log(result); //=> true //数组的情况
result = _.every([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]
return true;
}); //对象的情况
result = _.every({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: "三"}
return true;
});

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

var result;

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

2.10.4 _.every的功能和_.all是一样的

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

2.10.5 特殊情况

示例一:list的特殊情况(数组,object对象,字符串之外的值),会返回什么呢?

var result = _.every(null);
console.log(result) //=> true 直接返回不做任何操作

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

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

2.10.6 predicate还有其他写法?

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

var result = _.every([{ x: 1 }, { x: 1 }], 'x');
console.log(result) //=> true 会检测key是否全部为x

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

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

示例三:predicate为现有的方法(这里只列出部分例子)

// _.identity方法
var result = _.every([1, 2, 3], _.identity);
console.log(result) //=> true // _.isNumber方法
var result = _.every([1, 2, 3, 'srt'], _.isNumber);
console.log(result) //=> false // _.isObject方法
var obj = [
{ x: 1, y: 2 },
{ x: 1 },
{ x: 1, z: 3 }
]
var result = _.every(obj, _.isObject);
console.log(result) //=> true

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

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

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

  2. Backbone学习笔记一Backbone中的MVC

    原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合( ...

  3. APPCAN学习笔记004---AppCan与Hybrid,appcan概述

    APPCAN学习笔记004---AppCan与Hybrid,appcan概述 技术qq交流群:JavaDream:251572072 本节讲了appcan的开发流程,和开发工具 笔记不做具体介绍了,以 ...

  4. Angularjs学习笔记《一》

    开始慢慢的学习新的框架,Angularjs,其中原理不知深浅,但有例子练习,慢慢熟知.看的英文文档一点点翻译学习. 第一个例子,写一个增加,选中,删除的例子, 首先要引进所用的框架源码,这样引进,下面 ...

  5. Backbone学习笔记 - View篇

    Backbone是一种Web端的MVC框架,这里纪录学习Model,View和Collection的笔记. 1 View initialize构造函数 Backbone.View 与jQuery库紧密 ...

  6. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  7. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  8. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  9. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  10. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. Qt入门(20)——Qt模块简介

    当你安装Qt时,这些模块会被构建到库中.在Qt企业版.Qt评估版和Qt自由版中,包含所有的模块.对于Qt专业版,提供基本的模块--工具.核心.窗口部件.对话框.图标视图和工作区模块.画布模块画布模块提 ...

  2. 字符串(后缀自动机):Codeforces Round #129 (Div. 1) E.Little Elephant and Strings

    E. Little Elephant and Strings time limit per test 3 seconds memory limit per test 256 megabytes inp ...

  3. 【动态规划】Vijos P1143 三取方格数(NOIP2000提高组)

    题目链接: https://vijos.org/p/1143 题目大意: NxN的矩阵,每个值只能取一次,从(1,1)走到(n,n)走三次能取得的最大值. 题目思路: [动态规划] f[x1][y1] ...

  4. 服务端调用js:javax.script

    谈起js在服务端的应用,大部分人的第一反应都是node.js.node.js作为一套服务器端的 JavaScript 运行环境,有自己的独到之处,但不是所有的地方都需要使用它. 例如在已有的服务端代码 ...

  5. a为整型数组,&a+1的含义

    #include <stdio.h> int main() { int a[10]; printf("a的值为:\t%d\n",a); printf("&am ...

  6. [Locked] Wiggle Sort

    Wiggle Sort Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= ...

  7. 西安Uber优步司机奖励政策(1月11日~1月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. zznu 1052 前n项和

    这算是循环的入门题目了,因为n 是小于 10 的非负数,所以可以知道结果不过超出int范围. 等式左边的数每次自增一个a,可以用一个变量来表示 na = na * 10 + a, 意思就是每循环一次就 ...

  9. 转载:Ununtu下中文乱码解决方案

    转载: 添加中文字符编码: $sudo vim /var/lib/locales/supported.d/local #添加下面的中文字符集 zh_CN.GBK GBK zh_CN.GB2312 GB ...

  10. ECLIPSE TOMCAT CONFIG JSTL

    {LJ?Dragon}[标题]Eclipse 配置 JSTL标签库 {LJ?Dragon}[Diary]2017年,愉快的开始:当和他们离别时,感觉失去了整个世界.........   1.JSTL简 ...