gpt4 book ai didi

javascript - 覆盖 Javascript Map 的相等函数

转载 作者:行者123 更新时间:2023-12-05 07:28:59 25 4
gpt4 key购买 nike

我想在 Javascript 中创建一个 Map(字典),其中键是数字数组,值是某个对象。我想从 map 中检索以前使用相同数组内容存储的值 - 即,如果我有一个包含某些内容的数组,我想检索以前为具有相同内容的数组存储的值(如果有的话)。

在大多数其他语言中,这很容易。您将覆盖 Map 的相等函数,以便测试具有相同内容的两个数组相等。这似乎不适用于 Javascript。映射键正在使用 SameValueZero 进行测试,如果两个对象是同一对象,它只会认为它们相等。

有没有一种方法可以覆盖相等性,或者是否有另一种在 Javascript 中处理这种情况的标准方法?

最佳答案

您可以使用代理 来更改访问对象属性(这也意味着数组元素)的方式。它们允许您通过回调拦截属性获取和设置。

这是一个仅存储两个元素的代理数组示例,无论您要求什么索引,它都会返回这两个元素之一。

    const arr = new Proxy([], {
get: function(self, prop) {
const index = parseInt(prop, 10)
// If the property is not a number, then no special handling
if (isNaN(index)) {
return self[prop]
}

if (index % 2 === 0) {
// even
return self[0]
} else {
// odd
return self[1]
}
}
})

// Add just two elements
arr.push('even')
arr.push('odd')

// Get any index
console.log(arr[0]) // even
console.log(arr[1]) // odd
console.log(arr[2]) // even
console.log(arr[301]) // odd


或者,您可以编写自己的类,它不依赖于拦截基本运算符的“魔法”,而只需要 get(key)set(key, value) 使用您想要的任何逻辑的方法。

关于javascript - 覆盖 Javascript Map 的相等函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53051344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com