Open2
JavaScriptの小ネタ
forEachの値変更
以下のようにforEachで配列を回しつつ、要素を更新したいときがあると思う。
const test = [1, 2, 3];
test.forEach((t) => t = 4);
console.log(test); // [1, 2, 3]
上記のコードは機能しない。
forEachで回している要素は、プリミティブなら値をオブジェクトならメモリアドレスを保持する。
つまり、プリミティブの場合はメモリ的には別物扱いになる。
そのため、forEachで値を更新する場合は、
配列のインデックスを指定して本体に対して書き込むを行うか、
const test = [1, 2, 3];
test.forEach((t, i) => test[i] = 4);
console.log(test); // [4, 4, 4]
オブジェクトにしてプロパティに対して書き込む。
const test = [{id: 1}, {id: 2}, {id: 3}];
test.forEach((t) => t.id = 4);
console.log(test); // [4, 4, 4]
階層の深いオブジェクトを改善する
const test = {
findMany: () => {
return {
where: () => {
return {
select: () => {
return new Error('Error');
}
}
}
}
}
};
ビルダーパターンを使う
const test = builder()
.add(findMany)
.add(where)
.add(select)
.build();