JavaScriptの個人的メモ

## やりたいこと
使用言語はJavaScript
Paiza.ioのオンライン環境で実行
![test.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746814/9cceb434-1360-47c0-6e69-03f3c1c3274f.jpeg)
塗りつぶしのマス同士の間隔をX軸ごと、Y軸ごとに取得したい
X軸だと座標(3,2)と座標(4,2),座標(2,5)と座標(9.5),座標(4,7)と座標(7,7)の間隔を配列に取得
重複する間隔は不要

## コード例
```test.js
process.stdin.resume();
process.stdin.setEncoding('utf8');

var beforeX;
var afterX;

var beforeY;
var afterY;

var beforeID;
var afterID;

//ボール構造体
function ballStruct(){
    this.ID="";
    this.X="";
    this.Y="";
    this.BallX="";
    this.BallY="";
}
//ボール構造体の配列
var bsArr=[];
//データ定義
for(var i=1;i<=9;i++){
    var tmp=new ballStruct();
    tmp.ID=i;
    if(i<4){
        tmp.Y=4.5;
        tmp.BallY=3;
    }else if(i<7){
        tmp.Y=3;
        tmp.BallY=2;
    }else{
        tmp.Y=1.5;
        tmp.BallY=1;
    }
    if(i%3==1){
        tmp.X=1.9;
        tmp.BallX=1;
    }else if(i%3==2){
        tmp.X=4;
        tmp.BallX=2;
    }else{
        tmp.X=5.7;
        tmp.BallX=3;
    }
    bsArr.push(tmp);
}

//マス定義
var distinct=[1,2,3];
var distinct2=[1,2,3];

var bflag=false;
var aflag=false;

var pitchX=[];
var pitchY=[];

//X
for(var i=0;i<=distinct2.length-1;i++){
    for(var j=0;j<=distinct.length-1;j++){
        beforeID=BallXYToBallID(distinct[j],distinct2[i]);
        //最初に検索出来たものを最初の比較対象とする
        if(beforeID!=-1){
            //最初に見つけたボールのIDからXY座標を取得
            beforeX=BallIDToX(beforeID);
            bflag=true;
        }
        //最初の比較対象が見つかっていれば、隣を探し、処理をする
        if(bflag){
            afterID=BallXYToBallID(distinct[j+1],distinct2[i]);
            if(afterID!=-1){
                afterX=BallIDToX(afterID);
                aflag=true;
            }
        }
        if(aflag){
            var compare=Math.abs(beforeX-afterX);
            if(pitchX.indexOf(compare)==-1){
                pitchX.push(compare);
                aflag=false;
                beforeX=afterX;
            }else{
                aflag=false;
            }
        }
    }
    bflag=false;
}

//Y
for(var i=0;i<=distinct.length-1;i++){
    for(var j=0;j<=distinct2.length-1;j++){
        
        beforeID=BallXYToBallID(distinct[i],distinct2[j]);
        
        //最初に検索出来たものを最初の比較対象とする
        if(beforeID!=-1){
            //最初に見つけたボールのIDからXY座標を取得
            beforeY=BallIDToY(beforeID);
            bflag=true;
        }
        //最初の比較対象が見つかっていれば、隣を探し、処理をする
        if(bflag){
            afterID=BallXYToBallID(distinct[i],distinct2[j+1]);
            if(afterID!=-1){
                afterY=BallIDToY(afterID);
                aflag=true;
            }
        }
        if(aflag){
            var compare=Math.abs(beforeY-afterY);
            if(pitchY.indexOf(compare)==-1){
                pitchY.push(compare);
                aflag=false;
                beforeY=afterY;
            }else{
                aflag=false;
            }
        }
    }
    bflag=false;
}

function BallXYToBallID(x,y){
    for(var i=0;i<bsArr.length;i++){
        if((bsArr[i].BallX==x)&&(bsArr[i].BallY==y)){
            return bsArr[i].ID;
        }
    }
    return -1;
}

function BallIDToX(ID){
    for(var i=0;i<bsArr.length;i++){
        if(bsArr[i].ID==ID){
            return bsArr[i].X;
        }
    }
    return -1;
}

function BallIDToY(ID){
    for(var i=0;i<bsArr.length;i++){
        if(bsArr[i].ID==ID){
            return bsArr[i].Y;
        }
    }
    return -1;
}

for(var i=0;i<pitchX.length;i++){
    console.log("X:"+pitchX[i]);
}

for(var i=0;i<pitchY.length;i++){
    console.log("Y:"+pitchY[i]);
}
```
##　結果
```
X:2.1
X:1.7
Y:1.5
```
コード例ではデータ定義がしやすいように3*3の9マスでやったが、結果はOK
![test2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746814/b9ca1675-8aa1-477a-c0ab-00222946038d.jpeg)
こういったデータ定義例でも動作OK

## 備忘録
BallXYが画像内で割り振っている番号で、XYは実際の座標とする
関数はIDからX,Yを取得するものとBallX,YからIDを取得するものを用いている

Paiza.ioでコーディングしたが、慣れると便利

二重配列多用が野暮ったい