我正在制作多个对象,然后我JSON.stringify
。然后我把它们变成哈希。我需要以相同的顺序对所有属性进行字符串化,以便我的哈希值保持一致。例如:
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
),但保证{{1}的顺序它呢?
答案 0 :(得分:0)
MDN处的JSON.stringify()
文档和ECMAScript Language Specification未指明字符串化的顺序。虽然这个顺序对于string
,number
和boolean
这样的原始类型来说非常顺序,但您无法确定对象,函数,数组等等。最好的选择可能是实现您自己的stringify
版本,以便100%确定输出。