目次
- 困ったこと
- 配列の最後の要素を取り出す方法
- 配列のコピー(参照渡しと値渡しの違い)
- 配列へ代入と削除(appendとextendとremove)
- 配列のfor文(JSにはいくつか書き方がある)
- リスト内に要素が含まれているか
-
リストの中身をシャッフルできない(random.shuffle(list)が使えない)
pythonで書いていたコードをJSに書き直す作業をした時の備忘録。
今後JS(Vue)を使うことが増えると思うので、忘れないように記録しておきます。
- Pythonで使えたモジュールがJSでは使えない
- 配列の指定の仕方がめんどくさい
最後の要素を取得する
Python
array1=[1,2,3,4]
array1[-1] #4
JS
var array1 = [1,2,3,4];
array1[array1.lenght - 1]
配列のコピー(参照渡しと値渡しの違い)
PythonやJavaScriptには、そもそもC++のように参照渡しや値渡しは存在しない言語なので、ここではJavaScriptのsliceについて語ります。
const array1=[1,2,3,4];
const array = array1.slice();
console.log(array) //[1,2,3,4]
以下、コメントでご指摘いただいた内容ですが、Pythonでのcopy()やslice()は浅いコピーなので多次元配列やオブジェクトの配列では変更の影響が及びます。
const array1=[[1],[2],[3],[4]];
const array = array1.slice();
array[0][0] = 999
999
> array
[ [ 999 ], [ 2 ], [ 3 ], [ 4 ] ]
> array1
[ [ 999 ], [ 2 ], [ 3 ], [ 4 ] ]
配列へ代入と削除(appendとextendとremove)
追加
Python
array1=[1,2,3,4]
array = array1.append([5,6,7]) # [1,2,3,4,[5,6,7]]
array = array1.extend([5,6,7]) # [1,2,3,4,5,6,7]
JS
array1 = [1,2,3,4
array = array1.push([5,6,7]) // [1,2,3,4,[5,6,7]]
array = array1.concat([5,6,7]) // [1,2,3,4,5,6,7]
削除
Python
array1=[1,2,3,4]
array1.remove(1) #[2,3,4]
JS
array1 = [1,2,3,4]
var index = array1.findIndex(n => n === 1); //1のindexを探索
array1.splice(index,1) // indexから1個要素を取り除く
配列のfor文(JSにはいくつか書き方がある)
Python
array = [1,2,3,4]
for i in array:
print(i)
JS
var array = [1,2,3,4];
for (const elem of array) {
console.log(elem);
}
const arr = [1,2,3,4];
for (let i = 0; i < arr.length; ++i) {
console.log(arr[i]);
}
リスト内に要素が含まれているか
Python
array1=[1,2,3,4]
if 2 in array:
print('yes') #yes
JS
var array1 = [1,2,3,4];
if(array1.includes(2)){
console.log('yes')} //yes
リストの中身をシャッフルできない(random.shuffle(list)が使えない)
Python
list = [[1,2,3,4,5],[6,7],[8,9,10]
random_list = []
for i in list:
random_list.append(random.shuffle(i)) #[[2,4,5,3,1],[6,7],[9,10,8]]
w = [len(i) for i in random_list]
picked_list = random.choices(random_list, weights=w) #[2,4,5,3,1]
picked_list = [2,4,5,3,1]
picked_num = random.choice(picked_lst) #3
JS
var list = [[1,2,3,4,5],[6,7],[8,9,10];
var random_list = [];
for(let i =0 ;i<list.length;i++){
random_list.push(this.shuffle(list[i])) //[[2,4,5,3,1],[6,7],[9,10,8]]
}
var picked_index = this.ProbabilisticChoice(random_list); #picked_index = 0
var picked_list = random_list[picked_index] //[2,4,5,3,1]
var picked_num = picked_list[picked_index][Math.floor(Math.random() * picked_list.length)]; // 3
// 単純なシャッフル
function shuffle(array){
var list = array;
for (let i=list.length - 1 ;i>=0 ;i--){
const j = Math.floor(Math.random()*(i+1));
[list[i],list[j]] = [list[j],list[i]];
}
return list
},
// リストの長いものから取得する関数(重みつけ)
function ProbabilisticChoice(array){
var lists = array;
var totalWeight = this.total(array);
var r = Math.random()*totalWeight;
var s=0.0;
for(let j=0;j<lists.length;j++){
s+=lists[j].length;
if(r<s){
return j
}
}
}