0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JS】各要素に対応する配列があるか調べるプログラム

Posted at

#【JS】各要素に対応する配列があるか調べるプログラム

JSの勉強。

ある配列の各要素の2乗に対応する要素が含まれているか確認するプログラム(same)を作成する。

・同不順
・出現回数が合っていること

例1
//関数sameの結果例
arr1 = [3,2,1,7,2]
arr2 = [49,4,4,9,1]

same(arr1, arr2)
//true

対応する要素がある場合は、trueを返す。


例2
//関数sameの結果例
arr1 = [3,2,1,7,2]
arr2 = [49,4,9,1]

same(arr1, arr2)
//false

2乗に対応する値が存在しても、出現回数が合っていない場合はfalseを返す。

##same1

解答1
function same1(arr1, arr2){
    if (arr1.length !== arr2.length){
        return false
    }

    else{   
        arr1 = arr1.sort((a,b)=>a-b)
        arr2 = arr2.sort((a,b)=>a-b)

        for(let i=0; i<arr1.length; i++){
            if(arr1[i]**2 !== arr2[i]){
                return false
            }
        }
     return true
    }
}

sortメソッドを使って各配列をソートしてから比較する。


※注
sortは文字列として並べ替えするため、2桁の数値がある場合は並びが意図しない形になる。

引数でsort((a,b)=>a-b)を指定することで、2桁の数値も正しく並び替えることができる。

sort
arr1 = [6,5,8,10,1,72,25,9]
arr1.sort()

// [1, 10, 25, 5, 6, 72, 8, 9]
js:sort
arr1 = [6,5,8,10,1,72,25,9]
arr1.sort((a,b)=>(a-b))

// [1, 5, 6, 8, 9, 10, 25, 72]

##same2
解答2
function same2(arr1, arr2){
    //要素の個数が合っていない場合はfalse
    if(arr1.length !== arr2.length){
        return false;
    }
    for(let i=0; i<arr1.length; i++){
        //arr2の中で、arr1の2乗と対応する値の配列番号を格納していく。
        let correctIndex = arr2.indexOf(arr1[i] ** 2)
        
        //該当する値がなければ(-1)、falseを返す
        if(correctIndex === -1){
            return false
        }
    }
    return true
}

indexOfメソッドを使う方法。
arr.indexOf(str)

指定した値の配列番号を返す。値がない場合は-1を返す。


##same3
解答3
function same3(arr1, arr2){
    if(arr1.length !== arr2.length){
        return false;
    }
    //オブジェクトを2つ用意
    let frequencyCounter1 = {}
    let frequencyCounter2 = {}
    for(let val of arr1){
        //指定したキーに値があればその値+1、なければ0+1する。(キーに該当する数値が何回出現したかカウントする)    
        frequencyCounter1[val] = (frequencyCounter1[val] || 0) +1
    }
    for(let val of arr2){
        frequencyCounter2[val] = (frequencyCounter2[val] || 0) +1
    }
    for(let key in frequencyCounter1){
        //指定した値の有無を確認。なければfalseを返す
        if(!(key**2 in frequencyCounter2)){
            return false
        }
        //出現回数が合っているか確認
        if(frequencyCounter2[key**2] !== frequencyCounter1[key]){
            return false
        }
    }
    //カウンター確認用
    console.log(frequencyCounter1)
    console.log(frequencyCounter2)

    return true

}

オブジェクトを用意し、数値の出現回数をカウントして比較する。

確認
arr1=[3,5,2,1,3]
arr2=[25,4,1,9,9]
same3(arr1, arr2)

//{1: 1, 2: 1, 3: 2, 5: 1}
//{1: 1, 4: 1, 9: 2, 25: 1}
//true

・オブジェクトはkey:valueで定義される配列。
obj[key]=valueで指定したキーに値を代入する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?