【发布时间】:2020-09-19 00:24:11
【问题描述】:
我想从对象的值创建一个唯一的字符串/键/标识符/散列。例如:
let myObj =
{
key1: 'val1',
key2: 'val2',
key3: 'val3',
key4: 'val4'
};
function getObjectUniqueKey(obj) {
return (`${ obj.key1 }|${ obj.key2 }|${ obj.key3 }|${ obj.key4 }`);
}
getObjectUniqueKey() 方法可以正常工作,但是它不能扩展到更大的对象(我的对象有超过 10 个键)。
在 JavaScript 中有什么方法可以创建一个唯一的字符串来代表一个对象?类似于 JSON.stringify() 的东西,但不是那么健壮吗?
(JSON.stringify 也会对键进行字符串化,但我所有的对象都有相同的接口 - 相同的键名 - 所以不需要对它们进行字符串化)。
-
{ key: 'val1' }和{ key: 'val2' }应该会产生不同的结果。 -
{ key1: 'val' }和{ key2: 'val' }应该会产生不同的结果。 -
{ a: 1, b: 2 }和{ b: 2, a: 1 }应该会产生相同的结果。
【问题讨论】:
-
你可以做
JSON.stringify(myObj)并替换数字和字母以外的不必要的东西str.replace(/[\W\D]/g, '') -
@JonasWilms - 我已经更新了我的问题,
JSON.stringify的问题在于它还会对键进行字符串化, -
如果只需要在ram中唯一地映射对象,最好干脆做
let m = new Map(); m.set(myObj, 'someCorrespondingValue'); m.set(anotherObj, 'anotherCorrespondingValue); -
通过key计算对象的值对你来说重要还是唯一重要?
-
应该
{ key: 'val1' }和{ key: 'val2' }产生相同的哈希?{ a: 1, b: 2 }和{ b: 2, a: 1 }是否应该产生相同的哈希?{ key1: 'val' }和{ key2: 'val' }是否应该产生相同的哈希??
标签: javascript stringify