OSDN Git Service

グラフ自動追尾機能を追加。
[chnosproject/AI004.git] / aiext.js
index 9d41aaf..16e4c3d 100644 (file)
--- a/aiext.js
+++ b/aiext.js
@@ -92,6 +92,46 @@ Array.prototype.isIncluded = function(obj, fEqualTo){
        }
        return false;
 }
+Array.prototype.search2DLineIndex = function(column, obj, fEqualTo){
+       //与えられた配列を二次元配列として解釈し
+       //array[n][column]がobjと等価になる最初の行nを返す。
+       //fEqualToは省略可能で、評価関数fEqualTo(array[n][column], obj)を設定する。
+       //該当する行がなかった場合、戻り値はundefinedとなる。
+       if(fEqualTo == undefined){
+               for(var i = 0, iLen = this.length; i < iLen; i++){
+                       if(this[i] instanceof Array && this[i][column] == obj){
+                               return i;
+                       }
+               }
+       } else{
+               for(var i = 0, iLen = this.length; i < iLen; i++){
+                       if(this[i] instanceof Array && fEqualTo(this[i][column], obj)){
+                               return i;
+                       }
+               }
+       }
+       return undefined;
+}
+Array.prototype.search2DObject = function(searchColumn, retvColumn, obj, fEqualTo){
+       //与えられた配列を二次元配列として解釈し
+       //array[n][searchColumn]がobjと等価になる最初の行のオブジェクトarray[n][retvColumn]を返す。
+       //fEqualToは省略可能で、評価関数fEqualTo(array[n][searchColumn], obj)を設定する。
+       //該当する行がなかった場合、戻り値はundefinedとなる。
+       if(fEqualTo == undefined){
+               for(var i = 0, iLen = this.length; i < iLen; i++){
+                       if(this[i] instanceof Array && this[i][searchColumn] == obj){
+                               return this[i][retvColumn];
+                       }
+               }
+       } else{
+               for(var i = 0, iLen = this.length; i < iLen; i++){
+                       if(this[i] instanceof Array && fEqualTo(this[i][searchColumn], obj)){
+                               return this[i][retvColumn];
+                       }
+               }
+       }
+       return undefined;
+}
 Array.prototype.pushUnique = function(obj, fEqualTo){
        //値が既に存在する場合は追加しない。評価関数fEqualTo(array[i], obj)を設定することができる。
        //結果的に配列内にあるオブジェクトが返される。
@@ -123,7 +163,6 @@ Array.prototype.stableSort = function(f){
                delete this[i].__id__;
        }
 }
-
 Array.prototype.splitByArray = function(separatorList){
        //Array中の文字列をseparatorList内の文字列でそれぞれで分割し、それらの文字列が含まれた配列を返す。
        var retArray = new Array();
@@ -134,14 +173,50 @@ Array.prototype.splitByArray = function(separatorList){
        
        return retArray;
 }
-
-Array.prototype.logAsHexByte = function(){
+Array.prototype.propertiesNamed = function(pName){
+       //Array内の各要素のプロパティpNameのリストを返す。
+       var retArray = new Array();
+       for(var i = 0, iLen = this.length; i < iLen; i++){
+               retArray.push(this[i][pName]);
+       }
+       return retArray;
+}
+Array.prototype.logAsHexByte = function(logfunc){
        //十六進バイト列としてデバッグ出力する。
+       //logfuncは省略時はconsole.logとなる。
+       if(logfunc === undefined){
+               logfunc = function(s){ console.log(s); };
+       }
+       var ds = "";
+       for(var i = 0, iLen = this.length; i < iLen; i++){
+               ds += ("00" + this[i].toString(16).toUpperCase()).slice(-2);
+       }
+       logfunc(ds);
+}
+Array.prototype.stringAsHexByte = function(){
+       //十六進バイト列として文字列を得る
        var ds = "";
        for(var i = 0, iLen = this.length; i < iLen; i++){
                ds += ("00" + this[i].toString(16).toUpperCase()).slice(-2);
        }
-       console.log(ds);
+       return ds;
+}
+Array.prototype.logEachPropertyNamed = function(pname, logfunc, suffix){
+       //Arrayのすべての各要素pについて、プロパティp[pname]を文字列としてlogfuncの引数に渡して呼び出す。
+       //suffixは各文字列の末尾に追加する文字列。省略時は改行文字となる。
+       //logfuncは省略時はconsole.logとなる。
+       if(logfunc === undefined){
+               logfunc = function(s){ console.log(s); };
+       }
+       if(suffix === undefined){
+               suffix = "\n";
+       }
+       for(var i = 0, iLen = this.length; i < iLen; i++){
+               logfunc(this[i][pname] + suffix);
+       }
+}
+Array.prototype.copy = function(){
+       return (new Array()).concat(this);
 }
 
 //文字列関連
@@ -188,6 +263,12 @@ String.prototype.splitByArray = function(separatorList){
                retArray = retArray.concat.apply(retArray, tmpArray);
        }
        
+       if(retArray.length == 0){
+               // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split
+               //文字列が空であるとき、split メソッドは、空の配列ではなく、1 つの空文字列を含む配列を返します。
+               retArray.push("");
+       }
+       
        return retArray;
 }
 
@@ -218,6 +299,12 @@ String.prototype.splitByArraySeparatorSeparated = function(separatorList){
                retArray = retArray.concat.apply(retArray, tmpArray);
        }
        
+       if(retArray.length == 0){
+               // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split
+               //文字列が空であるとき、split メソッドは、空の配列ではなく、1 つの空文字列を含む配列を返します。
+               retArray.push("");
+       }
+       
        return retArray;
 }
 
@@ -265,6 +352,12 @@ String.prototype.splitByArraySeparatorSeparatedLong = function(separatorList){
                checkArray = checkArray.concat.apply(checkArray, tmpCheckArray);
        }
        
+       if(retArray.length == 0){
+               // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split
+               //文字列が空であるとき、split メソッドは、空の配列ではなく、1 つの空文字列を含む配列を返します。
+               retArray.push("");
+       }
+       
        return retArray;
 }