UnderScore.jsAPI记录
2020-12-13 01:36
标签:des style class c code java each
遍历list中的所有元素,如果传递了context参数,则把iterator绑定到context对象上。iterator的参数是 (value,
key,
list))。返回list以方便链式调用。 map 通过变换函数(iterator迭代器)把list中的每个值映射到一个新的数组中(愚人码头注:产生一个新的数组)。 reduce reduce方法把list中元素归结为一个单独的数值。 reduceRight find 在list中逐项查找,返回第一个通过predicate迭代函数真值检测的元素值,如果没有值传递给测试迭代器将返回 filter 遍历list中的每个值,返回包含所有通过predicate真值检测的元素值。 where 遍历list中的每一个值,返回一个数组,这个数组包含包含properties所列出的属性的所有的键
- 值对。 findWhere reject 返回list中没有通过predicate真值检测的元素集合,与filter相反。 every 如果list中的所有元素都通过predicate的真值检测就返回true。 some 如果list中有任何一个元素通过 predicate 的真值检测就返回true。 contains 如果list包含指定的value则返回true invoke 在list的每个元素上执行methodName方法。 pluck pluck也许是map最常使用的用例模型的简化版本,即萃取对象数组中某属性值,返回一个数组。 max 返回list中的最大值。 min 返回list中的最小值。 sortBy 返回排序后的列表数据 groupBy 把一个集合分组为多个集合,通过 iterator 返回的结果进行分组. 给定一个list,和 一个用来返回一个在列表中的每个元素键
的iterator 函数(或属性名), 返回一个每一项索引的对象。 var stooges = [{name: ‘moe‘, age: 40}, {name: ‘larry‘, age: 50}, {name:
‘curly‘, age: 60}]; countBy 排序一个列表组成一个组,并且返回各组中的对象的数量的计数。 shuffle 返回一个随机乱序的 list 副本, sample 从 list中产生一个随机样本。列表,长度。 toArray size 返回list的长度。 first 返回array(数组)的第一个元素。 initial 返回数组中除了最后一个元素外的其他全部元素。 last 返回array(数组)的最后一个元素。 rest 返回数组中除了第一个元素外的其他全部元素。 compact 返回一个除去所有false值的 array副本。 flatten 将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组。
如果你传递 shallow参数,数组将只减少一维的嵌套。 without 返回一个删除所有values值的 array副本。(愚人码头注:使用===表达式做相等测试。) partition union 返回传入的 arrays(数组)并集:按顺序返回,数组的元素是唯一的,可以传入一个或多个 arrays(数组)。 intersection 返回传入 arrays(数组)交集。结果中的每个值是存在于传入的每个arrays(数组)里。 difference 类似于without,但返回的值来自array参数数组,并且不存在于other 数组. uniq 返回 array去重后的副本,
使用 === 做相等测试.
如果您确定 array 已经排序,
那么给isSorted 参数传递 true值,
此函数将运行的更快的算法. 如果要处理对象元素,
传参iterator 来获取要对比的属性. zip 将 每个相应位置的arrays的值合并在一起。在合并分开保存的数据时很有用.
如果你用来处理矩阵嵌套数组时, _.zip.apply 可以做类似的效果。 object 将数组转换为对象。传递任何一个单独[key, value]对的列表,或者一个键的列表和一个值得列表。
如果存在重复键,最后一个值将被返回。 indexOf 返回value在该 array 中的索引值,如果value不存在 array中就返回-1。使用原生的indexOf 函数,除非它失效。如果您正在使用一个大数组,你知道数组已经排序,传递true给isSorted将更快的用二进制搜索..,或者,传递一个数字作为第三个参数,为了在给定的索引的数组中寻找第一个匹配值。 lastIndexOf lastIndexOf sortedIndex 使用二分查找确定value在list中的位置序号,value按此序号插入能保持list原有的排序。
如果提供iterator函数,iterator将作为list排序的依据,包括你传递的value 。iterator也可以是字符串的属性名用来排序(比如length)。 range 一个用来创建整数灵活编号的列表的函数,便于each 和 map循环。如果省略start则默认为 0;step 默认为 1.返回一个从start 到stop的整数的列表,用step来增加
(或减少)独占。值得注意的是,如果stop值在start前面(也就是stop值小于start值),那么值域会被认为是零长度,而不是负增长。-如果你要一个负数的值域
,请使用负数step. bind 绑定函数 function 到对象 object 上,
也就是无论何时调用函数,
函数里的 this 都指向这个 object.
任意可选参数 arguments 可以绑定到函数 function ,
可以填充函数所需要的参数, 这也被成为 partial
application。 bindAll 把methodNames参数指定的方法绑定到object上,这些方法就会在对象的上下文环境中执行。绑定函数用作事件处理函数时非常便利,否则函数被调用时this一点用也没有。如果不设置methodNames参数,对象上的所有方法都会被绑定。 partial 局部应用一个函数填充在任意个数的 参数,不改变其动态this值。和bind方法很相近。 You may
pass _ in your list
of arguments to specify an argument that should not
be pre-filled, but left open to supply at call-time. memoize Memoizes方法可以缓存某函数的计算结果。对于耗时较长的计算是很有帮助的。如果传递了 hashFunction 参数,就用 hashFunction 的返回值作为key存储函数的计算结果。 hashFunction 默认使用function的第一个参数作为key delay elay类似setTimeout,等待wait毫秒后调用function。如果传递可选的参数arguments,当函数function执行时, arguments 会作为参数传入。 defer 延迟调用function直到当前调用栈清空为止,类似使用延时为0的setTimeout方法。对于执行开销大的计算和无阻塞UI线程的HTML渲染时候非常有用。
如果传递arguments参数,当函数function执行时, arguments 会作为参数传入。 throttle 创建并返回一个像节流阀一样的函数,当重复调用函数的时候,最多每隔 wait毫秒调用一次该函数。对于想控制一些触发频率较高的事件有帮助。(愚人码头注:详见:javascript函数的throttle和debounce) 默认情况下,throttle将在你调用的第一时间尽快执行这个function,并且,如果你在wait周期内调用任意次数的函数,都将尽快的被覆盖。如果你想禁用第一次首先执行的话,传递{leading:
false},还有如果你想禁用最后一次执行的话,传递{trailing: false}。 debounce 返回 function 函数的防反跳版本,
将延迟函数的执行(真正的执行)在函数最后一次调用时刻的 wait 毫秒之后.
对于必须在一些输入(多是一些用户操作)停止到达之后执行的行为有帮助。 例如: 渲染一个Markdown格式的评论预览,
当窗口停止改变大小之后重新计算布局, 等等. 传参 immediate 为 true 会让debounce 在 wait 间隔之后
触发最后的函数调用而不是最先的函数调用.在类似不小心点了提交按钮两下而提交了两次的情况下很有用. once 创建一个只能调用一次的函数。重复调用改进的方法也没有效果,只会返回第一次执行时的结果。 作为初始化函数使用时非常有用,
不用再设一个boolean值来检查是否已经初始化完成. after 创建一个函数, 只有在运行了 count 次之后才有效果.
在处理同组异步请求返回结果时, 如果你要确保同组里所有异步请求完成之后才 执行这个函数, 这将非常有用. now 一个优化的方式来获得一个当前时间的整数时间戳。 可用于实现定时/动画功能。 wrap 将第一个函数 function 封装到函数 wrapper 里面,
并把函数 function 作为第一个参数传给 wrapper.
这样可以让 wrapper 在 function 运行之前和之后
执行代码, 调整参数然后附有条件地执行. compose 返回函数集 functions 组合后的复合函数,
也就是一个函数执行完之后把返回的结果再作为参数赋给下一个函数来执行. 以此类推. 在数学里,
把函数 f(), g(),
和 h() 组合起来可以得到复合函数 f(g(h())). Object Functions keys 获取object对象所有的属性名称。 values 返回object对象所有的属性值。 pairs 把一个对象转变为一个[key, value]形式的数组。 invert R返回一个object副本,使其键(keys)和值(values)对换。对于这个操作,必须确保object里所有的值都是唯一的且可以序列号成字符串. functions 返回一个对象里所有的方法名, 而且是已经排序的 — 也就是说,
对象里每个方法(属性值是一个函数)的名称. extend 复制source对象中的所有属性覆盖到destination对象上,并且返回 destination 对象.
复制是按顺序的, 所以后面的对象属性会把前面的对象属性覆盖掉(如果有重复). pick 返回一个object副本,只过滤出keys(有效的键组成的数组)参数指定的属性值。 omit 返回一个object副本,只过滤出除去keys(有效的键组成的数组)参数指定的属性值。 defaults 用defaults对象填充object中undefined属性。并且返回这个object。一旦这个属性被填充,再使用defaults方法将不会有任何效果。 clone 创建
一个浅复制(浅拷贝)的克隆object。任何嵌套的对象或数组都通过引用拷贝,不会复制。 tap 用 object作为参数来调用函数interceptor,然后返回object。这种方法的主要意图是作为函数链式调用
的一环, 为了对此对象执行操作并返回对象本身。 has 对象是否包含给定的键吗?等同于object.hasOwnProperty(key),但是使用hasOwnProperty 函数的一个安全引用,以防意外覆盖。 property 返回一个函数,这个函数返回任何传入的对象的key 属性。 matches 返回一个断言函数,这个函数会给你一个断言
可以用来辨别
给定的对象是否匹配指定键/值属性的列表。 isEqual 执行两个对象之间的优化深度比较,确定他们是否应被视为相等。 isEmpty 如果object 不包含任何值(没有可枚举的属性),返回true。 isElement 如果object是一个DOM元素,返回true isArray 如果object是一个数组,返回true。 isObject 如果object是一个对象,返回true。需要注意的是JavaScript数组和函数是对象,字符串和数字不是。 isArguments 如果object是一个参数对象,返回true isFunction 如果object是一个参数对象,返回true isString 如果object是一个字符串,返回true isNumber 如果object是一个数值,返回true (包括 NaN)。 isFinite 如果object是一个有限的数字,返回true。 isBoolean 如果object是一个布尔值,返回true。 isDate 如果object是一个日期时间,返回true isRegExp 如果object是一个正则表达式,返回true isNaN 如果object是 NaN,返回true。 isNull 如果object的值是 null,返回true。 isUndefined 如果value是undefined,返回true。 noConflict 放弃Underscore 的控制变量"_"。返回Underscore 对象的引用。 identity 返回与传入参数相等的值. 相当于数学里的: f(x) = x constant 创建一个函数,这个函数 返回相同的值 用来作为_.constant的参数。 times random 返回一个min 和 max之间的随机整数。如果你只传递一个参数,那么将返回0和这个参数之间的整数。 mixin uniqueId escape 转义HTML字符串,替换&, , >, ", ‘,
and /字符。 unescape 和escape相反。转义HTML字符串,替换&, <, >, ", ',
and/字符。 result 如果对象 object 中的属性 property 是函数,
则调用它, 否则, 返回它。 template 将 JavaScript 模板编译为可以用于页面呈现的函数,
对于通过JSON数据源生成复杂的HTML并呈现出来的操作非常有用。 模板函数可以使用 插入变量,
也可以用执行任意的 JavaScript 代码。 如果您希望插入一个值,
并让其进行HTML转义,请使用。
当你要给模板函数赋值的时候,可以传递一个含有与模板对应属性的data对象 。 如果您要写一个一次性的,
您可以传对象 data 作为第二个参数给模板 template来直接呈现,
这样页面会立即呈现而不是返回一个模板函数.
参数 settings 是一个哈希表包含任何可以覆盖的设置 _.templateSettings.Collection Functions (Arrays or Objects)
_.each(list, iterator,
[context])
_.each([1, 2, 3], alert);
=> alerts each number in turn...
_.map(list, iterator, [context])
_.reduce(list, iterator,
memo, [context])
_.reduceRight(list, iterator, memo,
[context])
_.find(list,
predicate, [context])
undefined
。_.filter(list, predicate,
[context])
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]
_.where(list,
properties)
_.where(listOfPlays, {author: "Shakespeare", year: 1611});
=> [{title: "Cymbeline", author: "Shakespeare", year: 1611},
{title: "The Tempest", author: "Shakespeare", year: 1611}]
_.findWhere(list,
properties)
_.reject(list,
predicate, [context])
_.every(list, [predicate],
[context])
_.some(list, [predicate],
[context])
_.contains(list,
value)
_.invoke(list, methodName,
*arguments)
_.invoke([[5, 1, 7], [3, 2, 1]], ‘sort‘);
=> [[1, 5, 7], [1, 2, 3]]
_.pluck(list,
propertyName)
_.max(list,
[iterator], [context])
_.min(list, [iterator],
[context])
_.sortBy(list, iterator,
[context])
_.groupBy(list, iterator,
[context])
indexBy
_.indexBy(list, iterator, [context])
_.indexBy(stooges, ‘age‘);
=> {
"40": {name: ‘moe‘, age: 40},
"50": {name: ‘larry‘, age: 50},
"60": {name: ‘curly‘, age: 60}
}
_.countBy(list, iterator,
[context])
_.shuffle(list)
_.sample(list,
[n])
,_.sample([1, 2, 3, 4, 5, 6]);
=> 4
_.sample([1, 2, 3, 4, 5, 6], 3);
=> [1, 6, 2]
_.toArray(list)
把list(任何可以迭代的对象)转换成一个数组,在转换 arguments 对象时非常有用。
_.size(list)
Array Functions
_.first(array,
[n])
_.initial(array,
[n])
_.last(array,
[n])
_.rest(array,
[index])
_.compact(array)
_.flatten(array,
[shallow])
_.flatten([1, [2], [3, [[4]]]]);
=> [1, 2, 3, 4];
_.flatten([1, [2], [3, [[4]]]], true);
=> [1, 2, 3, [[4]]];
_.without(array,
*values)
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
=> [2, 3, 4]
_.partition(array,
predicate)
_.union(*arrays)
_.intersection(*arrays)
_.difference(array,
*others)
_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
=> [1, 3, 4]
_.uniq(array, [isSorted],
[iterator])
_.uniq([1, 2, 1, 3, 1, 4]);
=> [1, 2, 3, 4]
_.zip(*arrays)
_.zip([‘moe‘, ‘larry‘, ‘curly‘], [30, 40, 50], [true, false, false]);
=> [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]
_.object(list,
[values])
_.object([‘moe‘, ‘larry‘, ‘curly‘], [30, 40, 50]);
=> {moe: 30, larry: 40, curly: 50}
_.object([[‘moe‘, 30], [‘larry‘, 40], [‘curly‘, 50]]);
=> {moe: 30, larry: 40, curly: 50}
_.indexOf(array, value,
[isSorted])
_.indexOf([1, 2, 3], 2);
=> 1
_.lastIndexOf(array, value,
[fromIndex])
_.lastIndexOf(array, value,
[fromIndex])
返回value在该 array 中的从最后开始的索引值,如果value不存在 array中就返回-1。如果支持原生的lastIndexOf,将使用原生的lastIndexOf函数。
传递fromIndex将从你给定的索性值开始搜索。_.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
=> 4
_.sortedIndex(list, value,
[iterator], [context])
_.sortedIndex([10, 20, 30, 40, 50], 35);
=> 3
var stooges = [{name: ‘moe‘, age: 40}, {name: ‘curly‘, age: 60}];
_.sortedIndex(stooges, {name: ‘larry‘, age: 50}, ‘age‘);
=> 1
_.range([start], stop,
[step])
_.range(10);
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11);
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5);
=> [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1);
=> [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
_.range(0);
=> []
Function (uh, ahem) Functions
_.bind(function, object,
*arguments)
var func = function(greeting){ return greeting + ‘: ‘ + this.name };
func = _.bind(func, {name: ‘moe‘}, ‘hi‘);
func();
=> ‘hi: moe‘
_.bindAll(object,
*methodNames)
var buttonView = {
label : ‘underscore‘,
onClick: function(){ alert(‘clicked: ‘ + this.label); },
onHover: function(){ console.log(‘hovering: ‘ + this.label); }
};
_.bindAll(buttonView, ‘onClick‘, ‘onHover‘);
// When the button is clicked, this.label will have the correct value.
jQuery(‘#underscore_button‘).bind(‘click‘, buttonView.onClick);
_.partial(function,
*arguments)
var add = function(a, b) { return a + b; };
add5 = _.partial(add, 5);
add5(10);
=> 15
_.memoize(function,
[hashFunction])
var fibonacci = _.memoize(function(n) {
return n
_.delay(function, wait,
*arguments)
var log = _.bind(console.log, console);
_.delay(log, 1000, ‘logged later‘);
=> ‘logged later‘ // Appears after one second.
_.defer(function,
*arguments)
_.defer(function(){ alert(‘deferred‘); });
// Returns from the function before the alert runs.
_.throttle(function, wait,
[options])
var throttled = _.throttle(updatePosition, 100);
$(window).scroll(throttled);
_.debounce(function, wait,
[immediate])
var lazyLayout = _.debounce(calculateLayout, 300);
$(window).resize(lazyLayout);
_.once(function)
var initialize = _.once(createApplication);
initialize();
initialize();
// Application is only created once.
_.after(count,
function)
var renderNotes = _.after(notes.length, render);
_.each(notes, function(note) {
note.asyncSave({success: renderNotes});
});
// renderNotes is run once, after all notes have saved.
_.now()
_.now();
=> 1392066795351
_.wrap(function,
wrapper)
var hello = function(name) { return "hello: " + name; };
hello = _.wrap(hello, function(func) {
return "before, " + func("moe") + ", after";
});
hello();
=> ‘before, hello: moe, after‘
_.compose(*functions)
var greet = function(name){ return "hi: " + name; };
var exclaim = function(statement){ return statement.toUpperCase() + "!"; };
var welcome = _.compose(greet, exclaim);
welcome(‘moe‘);
=> ‘hi: MOE!‘
_.keys(object)
_.keys({one: 1, two: 2, three: 3});
=> ["one", "two", "three"]
_.values(object)
_.values({one: 1, two: 2, three: 3});
=> [1, 2, 3]
_.pairs(object)
_.pairs({one: 1, two: 2, three: 3});
=> [["one", 1], ["two", 2], ["three", 3]]
_.invert(object)
_.invert({Moe: "Moses", Larry: "Louis", Curly: "Jerome"});
=> {Moses: "Moe", Louis: "Larry", Jerome: "Curly"};
_.functions(object)
_.functions(_);
=> ["all", "any", "bind", "bindAll", "clone", "compact", "compose" ...
_.extend(destination,
*sources)
_.extend({name: ‘moe‘}, {age: 50});
=> {name: ‘moe‘, age: 50}
_.pick(object,
*keys)
_.pick({name: ‘moe‘, age: 50, userid: ‘moe1‘}, ‘name‘, ‘age‘);
=> {name: ‘moe‘, age: 50}
_.pick({name: ‘moe‘, age: 50, userid: ‘moe1‘}, function(value, key, object) {
return _.isNumber(value);
});
=> {age: 50}
_.omit(object,
*keys)
_.omit({name: ‘moe‘, age: 50, userid: ‘moe1‘}, ‘userid‘);
=> {name: ‘moe‘, age: 50}
_.omit({name: ‘moe‘, age: 50, userid: ‘moe1‘}, function(value, key, object) {
return _.isNumber(value);
});
=> {name: ‘moe‘, userid: ‘moe1‘}
_.defaults(object,
*defaults)
var iceCream = {flavor: "chocolate"};
_.defaults(iceCream, {flavor: "vanilla", sprinkles: "lots"});
=> {flavor: "chocolate", sprinkles: "lots"}
_.clone(object)
_.clone({name: ‘moe‘});
=> {name: ‘moe‘};
_.tap(object,
interceptor)
_.chain([1,2,3,200])
.filter(function(num) { return num % 2 == 0; })
.tap(alert)
.map(function(num) { return num * num })
.value();
=> // [2, 200] (alerted)
=> [4, 40000]
_.has(object,
key)
_.has({a: 1, b: 2, c: 3}, "b");
=> true
_.property(key)
var moe = {name: ‘moe‘};
‘moe‘ === _.property(‘name‘)(moe);
=> true
_.matches(attrs)
var ready = _.matches({selected: true, visible: true});
var readyToGoList = _.filter(list, ready);
_.isEqual(object,
other)
var moe = {name: ‘moe‘, luckyNumbers: [13, 27, 34]};
var clone = {name: ‘moe‘, luckyNumbers: [13, 27, 34]};
moe == clone;
=> false
_.isEqual(moe, clone);
=> true
_.isEmpty(object)
_.isEmpty([1, 2, 3]);
=> false
_.isEmpty({});
=> true
_.isElement(object)
_.isElement(jQuery(‘body‘)[0]);
=> true
_.isArray(object)
(function(){ return _.isArray(arguments); })();
=> false
_.isArray([1,2,3]);
=> true
_.isObject(value)
_.isObject({});
=> true
_.isObject(1);
=> false
_.isArguments(object)
(function(){ return _.isArguments(arguments); })(1, 2, 3);
=> true
_.isArguments([1,2,3]);
=> false
_.isFunction(object)
_.isFunction(alert);
=> true
_.isString(object)
_.isString("moe");
=> true
_.isNumber(object)
_.isNumber(8.4 * 5);
=> true
_.isFinite(object)
_.isFinite(-101);
=> true
_.isFinite(-Infinity);
=> false
_.isBoolean(object)
_.isBoolean(null);
=> false
_.isDate(object)
_.isDate(new Date());
=> true
_.isRegExp(object)
_.isRegExp(/moe/);
=> true
_.isNaN(object)
注意:
这和原生的isNaN 函数不一样,如果变量是undefined,原生的isNaN 函数也会返回 true 。_.isNaN(NaN);
=> true
isNaN(undefined);
=> true
_.isNaN(undefined);
=> false
_.isNull(object)
_.isNull(null);
=> true
_.isNull(undefined);
=> false
_.isUndefined(value)
_.isUndefined(window.missingVariable);
=> true
Utility Functions
_.noConflict()
var underscore = _.noConflict();
_.identity(value)
这个函数看似无用,
但是在Underscore里被用作默认的迭代器iterator.var moe = {name: ‘moe‘};
moe === _.identity(moe);
=> true
_.constant(value)
var moe = {name: ‘moe‘};
moe === _.constant(moe)();
=> true
_.times(n, iterator,
[context])
_.random(min,
max)
_.random(0, 100);
=> 42
_.mixin(object)
_.uniqueId([prefix])
_.escape(string)
_.escape(‘Curly, Larry & Moe‘);
=> "Curly, Larry & Moe"
_.unescape(string)
_.unescape(‘Curly, Larry & Moe‘);
=> "Curly, Larry & Moe"
_.result(object,
property)
var object = {cheese: ‘crumpets‘, stuff: function(){ return ‘nonsense‘; }};
_.result(object, ‘cheese‘);
=> "crumpets"
_.result(object, ‘stuff‘);
=> "nonsense"
_.template(templateString,
[data], [settings])
var compiled = _.template("hello: ");
compiled({name: ‘moe‘});
=> "hello: moe"
var list = "
value_(obj).value()
相关内容来自网络,http://www.css88.com/doc/underscore/#each
来自@愚人码头
UnderScore.jsAPI记录,搜素材,soscw.com
UnderScore.jsAPI记录
标签:des style class c code java
原文地址:http://www.cnblogs.com/diaosizhang/p/3744837.html