以下の内容はhttps://var.blog.jp/archives/75246136.htmlより取得しました。
COMMENT
コメント一覧 (4)
2. 通りすがり
2021/11/29 22:34
方法1
> タプルのような複数のデータをまとめたもので値が同じとみなす機能がないので 同じデータなら同じ値になる物を作ります
とありますが
const object_hash = new WeakMap()
function toHash(value) {
if (value instanceof Object) {
if (object_hash.has(value)) {
return object_hash.get(value)
}
const hash = "H" + Date.now() + Math.random().toString(16)
object_hash.set(value, hash)
return hash
} else {
return JSON.stringify(value)
}
}
const map = new Map()
function fn(a, b) {
const key = [a, b].map(toHash).join(" ")
if (map.has(key)) {
return map.get(key)
} else {
const value = Math.random()
map.set(key, value)
return value
}
}
console.log(fn("a", { b: 1 }));
console.log(fn("a", { b: 1 }));
を実行してみたところ、出力結果が下記のようなので、何をやりたいのかよくわかりません。
0.4340078142669057
0.7684165652958754
3. ななしさん
2021/11/29 22:36
エラーが出たので何度も投稿してしまいました。重複投稿すいません。
4.
[管理人]
2021/11/30 11:00
>>2
{b: 1} を 2 回作ると異なる参照なので別のデータです
{b: 1} を変数に入れてそれを使えば同じ値になるかと思います
const value1 = {b: 1}
console.log(fn("a", value1));
console.log(fn("a", value1));
0.14305216848429958
0.14305216848429958
5. ななしさん
2021/12/02 20:18
丁寧な回答ありがとうございました。納得しました。
長文と重複コメントすいません。お手間でなければ削除して下さって結構です。