Open6
個人用メモ<JS/TS>
文字数をカウント(サロゲートペア対策済み)
const hoge = "fugafuga";
[...hoge].length;
// -> 8
const fuga = "𠮟";
[...fuga].length;
// -> 1
ちなみに'𠮟'.length
は2となる。これの対策のため、一旦スプレッド構文を使って一文字ずつの配列に分解して、その配列の長さをカウントする。
追記: これでも結合文字列(Grapheme cluster)には対応していない。例えば、「👨👩👦👦」は7文字扱いになってしまう。これを一文字として扱うにはIntl.Segmenterを使うのがよさそう
TypeScriptのfunctionの型指定方法
const hoge = (fuga: <型>): <戻り値の型> => {
//処理
};
配列から空要素を削除
const hoge = ['あ', '', 'い']
const deleted = hoge.filter(v => v)
// -> ['あ', 'い']
空白の検知
三項演算子
Pythonとごっちゃになったのでメモしておく
条件式 ? trueの時に実行される式 : falseの時に実行される式
ちなみにPythonは
trueの時に実行される式 if 条件式 else falseの時に実行される式
ある配列が別の配列の部分集合(subset)となっているか判定
Array.prototype.every()
とArray.prototype.includes()
を組み合わせる。
const array1 = [1, 30, 39, 29, 10, 13];
const array2 = [1, 39, 29];
const array3 = [1, 2];
const res2 = array2.every((e) => array1.includes(e)); //true
const res3 = array3.every((e) => array1.includes(e)); //false
関数化して利用すると便利。
const isSubset = (array1: any[], array2: any[]) => array2.every((e) => array1.includes(e));
// JavaScriptの場合は以下
// const isSubset = (array1, array2) => array2.every((e) => array1.includes(e));
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 7, 6])); // true
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 8, 7])); // false
参考記事