1
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 1 year has passed since last update.

PythonコードをJavaScriptで書き直した時に困ったこと

Last updated at Posted at 2022-05-07

目次

  1. 困ったこと
  2. 配列の最後の要素を取り出す方法
  3. 配列のコピー(参照渡しと値渡しの違い)
    1. 参照渡し
    2. 値渡し
  4. 配列へ代入と削除(appendとextendとremove)
    1. 追加
    2. 削除
  5. 配列のfor文(JSにはいくつか書き方がある)
  6. リスト内に要素が含まれているか
  7. リストの中身をシャッフルできない(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
        }
    }
}
1
0
3

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
1
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?