Last active
July 29, 2017 03:48
-
-
Save Narazaka/47454acb3eb1912846ad2c1068064f21 to your computer and use it in GitHub Desktop.
ツクールMVプラグイン 配列要素の名前検索 find_by_name.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//=========================================================================== | |
// 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