Paepoi

Paepoi » JavaScript Tips » JavaScript その他

JavaScript その他

# 最終更新日 2022.10.24
Gjs での覚書です、環境によっては print を console.log で全置換してください

配列
indexOf, lastIndexOf, includes は文字列と同様に使えます
// 配列宣言
let array = ['YAMAHA', 'HONDA', 'SUZUKI', 'KAWASAKI'];
// 取り出し、先頭はゼロ
print(array[0]); //=> YAMAHA
// 追加
array.push('MAZDA');
// 前方に追加
array.unshift('TOYOTA');
// 書き換え
array[1] = 'SUBARU';
// 削除
array.splice(4, 1); // 4 番目から 1 つ分取り除く

// 合体、書き換えではなく戻り値なので注意
array = array.concat(['HINO', 'ISUZU'])

// 要素数
print(array.length);

// 含まれている?
if (array.includes('HONDA')) {
    print('あるよ');
}

// ループ 
for (let s of array) {
    print(s);
}
/* output
7
あるよ
TOYOTA
SUBARU
HONDA
SUZUKI
MAZDA
HINO
ISUZU
*/


// [3, 3, 3, 3, 3] になる
let aa = new Array(5).fill(3);

// ['日', '本', '語', ' ', 'O', 'K'] になる
let bb = Array.from('日本語 OK');

連想配列
Python と同様の以下が長い間使われてきたけどコレは object なので色々不便
var map = {'TOYOTA': 'LEXUS', 'HONDA': 'ACURA'};
特に for 文が挿入順にはならないのが困る
ES6 で Map が追加されたのでそちらを今後は使いましょう
let map = new Map();

// 追加
map.set('SUZUKI', 'Hayabusa');
map.set('HONDA', 'CBR1000RR');
map.set('YAMAHA', 'XMAX');
map.set('KAWASAKI', 'Z900RS');

// 取り出し、objeect のように添字は使えない @ print(map['SUZUKI']);
print(map.get('SUZUKI'));

// 書き換え
map.set('HONDA', 'Super Cub');
// 削除
map.delete('YAMAHA');

// 値の取り出し
if (map.has('KAWASAKI')) {
    let n = map.size;
    let k = map.get('KAWASAKI');
    print(`${n} 個のエントリー\n${k} が含まれています`)
}

// ループ
for (let [key, val] of map) {
    print(`${key} は ${val} です`);
}
/* output
3 個のエントリー
Z900RS が含まれています
SUZUKI は Hayabusa です
HONDA は Super Cub です
KAWASAKI は Z900RS です
*/

let, const
let 宣言された変数はブロック内スコープになる
もう var を使うのはヤメにしましょう
let letStr = 1;
var varStr = 1;

// 同一ブロックでの多重定義は Error になる
//let letStr = 4;

// var 宣言はブロック内スコープにならない
if (true) {
    let letStr = 2;
    var varStr = 2;
    let letBlock = 3;
    var varBlock = 3;
}

print(`letStr=${letStr} varStr=${varStr} varBlock=${varBlock}`);
//=> letStr=1 varStr=2 varBlock=3
try {
    print(letBlock);
} catch {
    print('letBlock は参照できません');
}

// const は他の言語と同様に変更できない定数になる
// 関係ないけど Swift では定数が let なのはややこしい

const SUZUKI = 'カッコイイ';
try {
    SUZUKI = 'カッコワルイ';
} catch {
    print('SUZUKI のバイクはカッコイイです');
}

非同期で実行
色々な書き方があるけど非同期にしたいだけなら以下が一番簡単
Promise.resolve(null)
    .then((value)=> {
        print('いーち');
    })
    .then((value)=> {
        print('にー');
        return 'さーん';
    })
    .then((value)=> {
        print(value);
        return 'だぁ!!!'
    })
    .then((value)=> {
        print(value);
    })
    .catch(function (error) {
        print(error);
    });

print('いくぞー');

/* output
いくぞー
いーち
にー
さーん
だぁ!!!
*/

三項演算子
ワンライナーのためではなく普通に便利なんです
let location = 'sftp://sasakima-nao@macbookair.local/Users/sasakima-nao';

/*
普通には以下のように書くけど何か無駄な代入が気になる
こういう場合に三項演算子を使うとスマートかつ読みやすいコードになる

let res = 'Path 名';
if (location.includes('//')) {
    res = 'URI';
}
*/
let res = location.includes('//') ? 'URI' : 'Path 名';
print(`引数は ${res} です`);

Copyright(C) sasakima-nao All rights reserved 2002 --- 2023.