#【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
で指定したキーに値を代入する。