Closed7

JS 備忘録

[配列の操作]

objectの配列から指定idのobjectを取り出す方法

const users = [
  { id: '101', name: 'Alice' },
  { id: '102', name: 'Bob' },
  { id: '103', name: 'Charlie' },
];
 
const id = '102';
const targetUser = users.find((v) => v.id === id);

https://ginpen.com/2018/12/04/array-find/

配列から要素を削除

let arr = [
   {id:1, name:"aaaa"},
   {id:2, name:"bbbb"},
   {id:3, name:"cccc"},
];

//id:2の要素を削除
let target_id = 2;
arr.some(function(v, i){
   if (v.id == target_id){
       arr.splice(i,1);
   }
});

//name:ccccの要素を削除
let target_name= 'cccc';
arr.some(function(v, i){
   if (v.name == target_name){
       arr.splice(i,1);
   }
});

[await/async について]

function PFunc() {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            try {
                throw new Error('エラーあったよ')
                resolve('エラーなかった')
            } catch(err) {
                reject(err);
            }
        }, 1000);
    });
}

async function Handling() {
    // throwErrorがrejectを返したら処理が中断される
    const result = await PFunc().catch( err => err );
    console.log(result);
    return result;
}

Handling();

参考

https://medium.com/@akameco/async関数においてtry-catchではなくawait-catchパターンを活用する-7dfda451043

await catchでcontinueする場合。

https://teratail.com/questions/287859

[文字置換]

replaceを使って置き換える場合は、正規表現を使わないと最初の該当箇所しか変換されないので注意。

以下のように書ける

let text = `aaa aaa aaa`;
text = text.replace(/aaa/g, 'ccc');
//ccc ccc ccc

複数指定する場合は下記

let text = `aaa bbb ccc`;
text = text.replace(/aaa|bbb|ccc/g, 'ddd');

//ddd ddd ddd

https://1-notes.com/javascript-multiple-specifications-of-replace/

[少数の計算]

小数計算の際、IEEE754の関係で誤差が生じます。
誤差が生じないよう計算するにはライブラリを使う方法が一般的。

bignumber.jsの場合

CDN

https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/8.0.2/bignumber.min.js
// 足し算
BigNumber(0.1).plus(0.2);  // '0.3'
// 引き算
BigNumber(0.4).minus(0.1); // '0.3'
// 掛け算
BigNumber(0.6).times(0.5); // '0.3'
// 割り算
BigNumber(0.15).div(0.5);  // '0.3'
// 割り算の整数部
BigNumber(5).idiv(2);      // '2'
// 割り算の剰余
BigNumber(1).mod(0.9);     // '0.1'
// べき乗
BigNumber(0.1).pow(2);     // '0.01'

https://qiita.com/k_moto/items/0b576a3351b77fb0aa98
このスクラップは3ヶ月前にクローズされました
作成者以外のコメントは許可されていません