ObjectRange - Prototype JavaScript 框架

Xunxin Prototype API

ObjectRange

排列(Range)描述了遵循某种规则变化的一系列的值。值必须是可推导的,更确切地说,需要实现一个 succ 方法让我们能够从一个值步进到下一个值(它的 后继者)。
译注:对于这里的 Range,大多数翻译为“范围”,但我觉得它的表现更类似于数学中的“数列”, 因为这里明显不限于数值,故译为“排列”。

Prototype 为 NumberString 提供了相应的 succ 方法。对于自定义对象, 如果要启用排列,你必须实现符合相应语义的 succ 方法。

ObjectRange 混入了 Enumerable,从而使得排列具有多方面的用途。 然而,需要注意的是,为获得更好的性能,通常需要重写 include 方法。

虽然 ObjectRange 提供了一个构造器,但获取排列的方法还是应该优先使用 $R 工具函数。两者是完全等同的(只是后者更为简捷)。

样例

毋庸置疑,数值的排列是最为常见的:

$A($R(1, 5)).join(', ') 
// -> '1, 2, 3, 4, 5' 
$R(1, 5).zip(
	['one', 'two', 'three', 'four', 'five'], 
	function(tuple) { 
		return tuple.join(' = '); 
	}
)
// -> ['1 = one', '2 = two', '3 = three', '4 = four', '5 = five'] 

注意基于 String 的排列:在 Stringsucc 方法中已有描述,它的范围并不仅限于英语字母表,而是与当前浏览器的字符集一致:

$A($R('a', 'e')) 
// -> ['a', 'b', 'c', 'd', 'e'],这一点都不奇怪
$A($R('ax', 'ba')) 
// -> 噢!非常大的数组,开始部分是 ['ax', 'ay', 'az', 'a{', 'a|', 'a}', 'a~'...] 

方法

include

include(value) -> Boolean

判断排列中是否包含指定的值。