【发布时间】:2017-12-04 19:27:21
【问题描述】:
我正在制作多个对象,然后我 JSON.stringifying 他们。然后我将它们变成哈希。我需要以相同的顺序对所有属性进行字符串化,以便我的哈希值是一致的。例如:
function createObj(index, value, key) {
var obj = {
value: value,
index: index,
key: key
};
return obj;
};
console.log(JSON.stringify(createObj(1, 'blue', 'ABC'))); // => {"value":"blue","index":1,"key":"ABC"}
console.log(JSON.stringify(createObj(2, 'red', 'DEF'))); // => {"value":"red","index":2,"key":"DEF"}
console.log(JSON.stringify(createObj(3, 'green', 'GHI'))); // => {"value":"green","index":3,"key":"GHI"}
我是否总是希望键按照我在createObj 函数中放置在对象上的顺序进行字符串化?创建对象后,我不再向对象添加任何属性。
如果我不能保证这个顺序,你能推荐一种为此目的保证键顺序的方法吗?
编辑:我意识到,当迭代一个对象时,键的顺序不能保证(for-in 和Object.keys),但是stringifying 它的顺序可以保证吗?
【问题讨论】:
-
直接推入数组即可。
-
@NikolaLukic 推送到什么数组?
-
现代 JavaScript 标准为属性顺序的行为提供了比以前更多的保证,但对我来说,依赖它似乎仍然很脆弱。但是我理解(也许)如果将一个“看起来”完全像另一个对象的对象字符串化会给你完全相同的 JSON 序列化字符串,那就太好了。
-
为了什么目的需要保证订单?我想对于单元测试,您可以使用
JSON.parse()来检查返回对象的有效性。
标签: javascript object key