是否可以在JavaScript中对象中的元素进行混洗?

Luc*_*emy 3 javascript shuffle object

我有这个对象:

{ foo: 1, bar: 2, cheese: 3 }
Run Code Online (Sandbox Code Playgroud)

我想要洗牌元素,所以它变成:

{ bar: 2, cheese: 3, foo: 1 }
Run Code Online (Sandbox Code Playgroud)

或者其他一些组合.有这个功能吗?这是因为我想在使用JSON.stringify它时产生不同的结果.我在互联网上找到的唯一答案是指在数组中改组对象.

谢谢.

log*_*yth 6

JS对象属性没有内在顺序.大多数JS运行时保留了添加密钥的顺序,但这不是语言要求,您不应该依赖它.例如,JSON.stringify总是按字母顺序序列化键或随机化它们是完全有效的.

如果排序很重要,您可能会保留一组两个数组来跟踪键和值.


jfr*_*d00 6

对象属性没有已定义的顺序,并且没有语言支持来定义或更改属性的顺序.根据语言规范,不必以任何方式保留订单.

如果需要定义的顺序,则应使用数组.


ow3*_*w3n 5

要随机化对象中属性的顺序,您可以访问键,将它们打乱,然后组装一个新对象。这是一个函数:

let obj = { "a":1, "b":2, "c":3, "d":4 }

function shuffleObject(obj){
    // new obj to return
  let newObj = {};
    // create keys array
  var keys = Object.keys(obj);
    // randomize keys array
    keys.sort(function(a,b){return Math.random()- 0.5;});
  // save in new array
    keys.forEach(function(k) {
        newObj[k] = obj[k];
});
  return newObj;
}

console.log(shuffleObject(obj));
console.log(shuffleObject(obj));
console.log(shuffleObject(obj));
Run Code Online (Sandbox Code Playgroud)