inazuma code :オブジェクトのメソッド
オブジェクト型(object)には、プロパティの追加・削除・取得・反復処理などの操作のためのメソッドが用意されています。
一部のメソッドはオブジェクトを直接変更する 破壊的操作 です。
メソッド一覧
| メソッド | 引数 | 返り値 | 説明 |
|---|---|---|---|
merge(other) | object other | object(this) | 他のオブジェクトのプロパティをマージ(同名キーは上書き、破壊的) |
map(callback) | function callback(value, key):mixed | object | 各プロパティを変換した新しいオブジェクトを返す |
filter(callback) | function callback(value, key):bool | object | 条件を満たすプロパティのみ抽出した新しいオブジェクトを返す |
reduce(callback, initial) | function callback(acc, value, key):mixed, mixed initial | mixed | 左から右にプロパティを集約 |
has(key) | string|int key | boolean | 指定キーが存在するか判定 |
is_callable(key) | string|int key | boolean | 指定キーが存在し、関数として呼び出せるか判定 |
keys() | なし | array | プロパティ名の配列を返す |
values() | なし | array | プロパティ値の配列を返す |
entries() | なし | array | [key, value] の配列を返す |
get(key) | string|int key | mixed | 指定キーの値(存在しない場合は null) |
set(key, value) | string|int key, mixed value | object(this) | プロパティを設定(破壊的) |
remove(key) | string|int key | object(this) | 指定キーを削除(破壊的) |
size() | なし | int | プロパティの数を返す |
使用例:
// マージ(破壊的)
let obj = { a: 1, b: 2 };
obj->merge({ b: 3, c: 4 });
// obj = { a: 1, b: 3, c: 4 }
// map(非破壊的)
let newObj = obj->map((value, key) => value * 2);
// newObj = { a: 2, b: 6, c: 8 }
// filter(非破壊的)
obj->filter((value, key) => key != "b");
// => { a: 1, c: 4 }
// reduce
obj->reduce((acc, value) => acc + value, 0);
// => 8
// プロパティ存在確認
obj->has("a"); // true
obj->is_callable("foo"); // false(関数でない)
// keys / values / entries
obj->keys(); // ["a", "b", "c"]
obj->values(); // [1, 3, 4]
obj->entries(); // [["a", 1], ["b", 3], ["c", 4]]
// get / set / remove
obj->get("a"); // 1
obj->set("d", 5); // obj = { a: 1, b: 3, c: 4, d: 5 }
obj->remove("b"); // obj = { a: 1, c: 4, d: 5 }
// size
obj->size(); // 3
仕様補足
merge()・set()・remove()は呼び出し元オブジェクトを直接変更する破壊的操作です。map()・filter()は新しいオブジェクトを返し、元のオブジェクトは変更されません。reduce()・map()・filter()のコールバックは(value, key)の順で引数を受け取れます。keys()・values()・entries()は結果を配列で返すため、さらに配列メソッドをチェインできます。is_callable()はオブジェクトのプロパティが関数かどうかを判定できます。