//ハッシュ オブジェクトのユーティリティ関数
function $ H(object ) {
return new Hash(object)
};
var Hash = Class.create(function() {
//初期化,新しいハッシュ オブジェクトを作成します
関数Initialize(object) {
this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); >/ /Enumerable のメソッドをオーバーライドします。
function _each(iterator) {
for (var key in this._object) {
var value = this._object[key]、トラバース時にペアが使用されますハッシュオブジェクト = [キー, 値];
ペア.値 = 値;
}
}
関数set( key, value) {
return this._object[key] = value;
function get(key) {
if (this._object[key] !==オブジェクト.prototype[key])
return this._object[key];
function unset(key) {
var value = this._object[key];この ._object[key] を削除します;
戻り値;
関数 toObject() {
return Object.clone(this._object);
関数キー() {
return this.pluck('key');
関数の値() {
return this.pluck('value'); >}
//値のキーを返します
functionindex(value) {
var match = this.detect(function(pair) {
return par.value === value ;
});
return match && match.key
function merge(object) {
return this.clone().update(object); >}
//元のハッシュ オブジェクトを更新し、オブジェクト パラメーターのキーと値のペアを元のハッシュ オブジェクトに更新します。
function update(object) {
return new Hash(object). inject(this, 関数 (結果, ペア) {
結果.set(ペア.キー, ペア.値);
結果を返す;
}); toQueryPair(key, value ) {
if (Object.isUnknown(value)) return key;
return key '=' encodeURIComponent(String.interpret(value));
function toQueryString() {
return this.inject([], function(results, paris) {
var key = encodeURIComponent(pair.key),values = par.value;
if (values && typeofvalues = = 'object') {
if (Object.isArray(values))
return results.concat(values.map(toQueryPair.curry(key)));
} else results.push(toQueryPair( key, value));
return results;
}).join('&');
function Inspection() {
return '#return par.map(Object.inspect).join(': ');
}).join( ', ') '}>';
}
関数 toJSON() {
return Object.toJSON(this.toObject());
function clone() {
return new Hash (this);
return {
initialize: 初期化,
_each: _each,
set: set,
get: 取得、
unset: unset 、
toObject: toObject、
toTemplateReplacements: toObject、
keys: キー、
values: 値、
index: インデックス、
merge: マージ、
update: 更新、
toQueryString: toQueryString、
inspect: 検査、
toJSON: toJSON、
clone: クローン
}); ());
Hash.from = $H;
クローン
それぞれ
取得
検査
キー
マージ
Remove
set
toJSON
toObject
toQueryString
unset
update
value
メソッドの例をいくつか挙げます。単純なメソッドはスキップします
toQueryString( ):
コードをコピー
コードは次のとおりです:
$H({アクション: 'ship'、order_id: 123、料金: ['f1', 'f2']、'label': 'デモ' }).toQueryString()
// -> 'action=ship&order_id=123&fees; =f1&fees=f2&label=a デモ'
// 空のハッシュは空のクエリ文字列です:
$H().toQueryString()
// ''
update():
var h = $H({ 名前: 'プロトタイプ'、バージョン: 1.5 });
h.update({ バージョン: 1.6、作者: 'サム' }).inspect(); 🎜>// -> #<ハッシュ:{'名前': 'プロトタイプ', '作成者': 'サム'}>
h.inspect(); 🎜>// -> #
// これは変更されることに注意してください元のハッシュ オブジェクト
merge():
コードをコピーコードは次のとおりです:
var h = $H({ 名前: 'プロトタイプ'、バージョン: 1.5 });
h.merge({ バージョン: 1.6、作成者: 'サム' }).inspect(); 🎜>// -> #<ハッシュ:{'名前': 'プロトタイプ', '作成者': 'サム'}>
h.inspect(); 🎜>// -> #
// ここでは元の Hash オブジェクトは変更されないことに注意してください。