2.11 some

2.11.1 语法:

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

2.11.2 说明:

对list集合的每个成员根据predicate进行真值检测,如果一个通过真值检测则返回true(匹配成功则立即返回)

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

2.11.3 代码示例:

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

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

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

// predicate为不传值(且list集合属性值包含真值返回true,否则返回false)
var result;
result = _.some([1, 2, 3]);
console.log(result); //=> true //数组的情况
result = _.some([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 false;
}); //对象的情况
result = _.some({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 false;
});

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

var result;

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

2.11.4 _.some的功能和_.any是一样的

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

2.11.5 特殊情况

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

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

示例二: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.11.6 predicate还有其他写法?

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

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

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

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

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

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

gitbook地址:https://www.gitbook.com/book/niec-fe/underscorejs/details

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

  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. Ubuntu下SSH设置

    网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...

  2. Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

    一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...

  3. [Hibernate] 基本增删查改

    本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作,即CRUD. 本例子的目录结构如下 hibernate.cfg.xml 存储数据库信息,如数据库类型,账 ...

  4. IFTT-意大利金融交易税

    港交所公告,IFTT目前适用于Prada股份及其4只权证,所有于今年3月1日或之后买入Prada的投资者均要缴付IFTT.就股份而言,IFTT税率为交易价值的0.22%(2014年1月1日起将降至0. ...

  5. 查看Oracle最耗时的SQL

    有很多种方法可以用来找出哪些SQL语句需要优化,但是很久以来,最简单的方法都是分析保存在V$SQL视图中的缓存的SQL信息.通过V$SQL视图,可以确定具有高消耗时间.CUP和IO读取的SQL语句. ...

  6. [PWA] 4. Hijacking Request

    We want to do offline first, the first thing we need to do is we should able to catch the browser re ...

  7. ActiveNotifications

    The NotificationManager can tell you how many notifications your application is currently showing. T ...

  8. GridView禁止上下滚动的方法

    通常情况下,我们使用GridView来完成类似表格的布局,这种布局,我们只需要设置列数,会自动根据适配器的数据进行适配,非常灵活. GridView其实就是一个容器.允许向其内部添加控件,通常情况下, ...

  9. Nginx反向代理,负载均衡配置

    主配置文件:nginx.conf # For more information on configuration, see: # * Official English Documentation: h ...

  10. AmazeUI 模态框封装

    /** * 模态窗口 */ window.Modal = { tpls:{ alert:'<div class="am-modal am-modal-alert" tabin ...