Skip to content

Instantly share code, notes, and snippets.

@Narazaka
Last active July 29, 2017 03:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Narazaka/47454acb3eb1912846ad2c1068064f21 to your computer and use it in GitHub Desktop.
Save Narazaka/47454acb3eb1912846ad2c1068064f21 to your computer and use it in GitHub Desktop.
ツクールMVプラグイン 配列要素の名前検索 find_by_name.js
//===========================================================================
// find_by_name.js
//===========================================================================
/*:
* @plugindesc 配列要素の名前検索
* @author Narazaka
*
* @help
* 配列を要素のnameプロパティで探すfindByNameメソッドを追加します。
* また変更可能性のない配列にmakeNameIndexすることで高速に参照できるインデックスをはり、名前のプロパティを追加することができます。
*
* var 二回攻撃 = $dataSkills.findByName("二回攻撃");
* $dataSkills.makeNameIndex();
* 二回攻撃 === $dataSkills.二回攻撃
*
* $dataなんとかにインデックスはるときはこうすると良いかも。あるいはシーンの自動実行イベントとか。
*
* (function() {
* var onLoad = DataManager.onLoad;
* DataManager.onLoad = function(object) {
* onLoad.apply(DataManager, arguments);
*
* if (object === $dataActors) {
* $dataActors.makeNameIndex();
* } else if (object === $dataSkills) {
* $dataSkills.makeNameIndex();
* } else if (object === $dataStates) {
* $dataItems.makeNameIndex();
* } else if (object === $dataItems) {
* $dataItems.makeNameIndex();
* }
* };
* })();
*
* [ 利用規約 ] ................................................................
* ・CC0とかなんかそういうやつで。
* ・商用、非商用、有償、無償、一般向け、成人向けを問わず、利用可能です。
* ・利用の際、連絡や報告は必要ありません。また、製作者名の記載等も不要です。
* ・プラグインを導入した作品に同梱する形以外での再配布、転載を許可します。
* ・本プラグインにより生じたいかなる問題についても、一切の責任を負いかねます。
* -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
* Web Site: https://narazaka.net/
* Twitter : https://twitter.com/narazaka
* Copylight (C) 2017 Narazaka
*/
(function() {
"use strict";
Array.prototype.findIndexByName = function(name) {
if (this._nameIndex) return this._nameIndex[name];
for (let index = 0; index < this.length; ++index) {
const value = this[index];
if (value && value.name === name) return index;
}
};
Array.prototype.findByName = function(name) {
const index = this.findIndexByName(name);
if (index) return this[index];
};
Array.prototype.includesName = function(name) {
return this.findIndexByName(name) != null;
};
Array.prototype.makeNameIndex = function() {
if (this._nameIndex) return;
const nameIndex = {};
for (let index = 0; index < this.length; ++index) {
const value = this[index];
if (value && value.name.length) {
nameIndex[value.name] = index;
(function(object, index, name) {
Object.defineProperty(object, name, {
configurable: true,
enumerable: true,
get: function() { return this[index] },
});
})(this, index, value.name);
}
}
this._nameIndex = nameIndex;
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment