javascript将对象属性与其值混合

javascript将对象属性与其值混合,javascript,Javascript,大家好, Object {two: 2, one: 1, three: 3} 我想实现的是洗牌所有对象的属性,包括它们的值 对象: var numbers = { one : 1, two : 2, three : 3}; 结果: Object {two: 2, one: 1, three: 3} 或任何其他变化 我尝试过几种数组洗牌方法,但没有一种对我有效 对象是无序的。一些浏览器可能会按字母顺序对其键进行排序,但这超出了任何规范的范围,因为该规范称为无序

大家好,

     Object {two: 2, one: 1, three: 3} 
我想实现的是洗牌所有对象的属性,包括它们的值

对象:

    var numbers = { one : 1, two : 2, three : 3};
结果:

     Object {two: 2, one: 1, three: 3} 
或任何其他变化

我尝试过几种数组洗牌方法,但没有一种对我有效

对象是无序的。一些浏览器可能会按字母顺序对其键进行排序,但这超出了任何规范的范围,因为该规范称为无序

但你能做的是:

var keys = Object.keys(numbers);
// drop your preffered shuffle algorithm here
keys.sort(function(a,b) {return Math.random() - 0.5;});
// now you have random keys!

keys.forEach(function(k) {console.log(numbers[k]);});
对象是无序的。一些浏览器可能会按字母顺序对其键进行排序,但这超出了任何规范的范围,因为该规范称为无序

但你能做的是:

var keys = Object.keys(numbers);
// drop your preffered shuffle algorithm here
keys.sort(function(a,b) {return Math.random() - 0.5;});
// now you have random keys!

keys.forEach(function(k) {console.log(numbers[k]);});
从ECMAScript 2015(ES2015,又称ES6)开始,对象属性(以前没有):

  • 让键成为一个新的空列表
  • 对于作为整数索引的O的每个自己的属性键P,按升序数字索引顺序
    • 添加P作为键的最后一个元素
  • 对于O的每个自己的属性键P,它是一个字符串,但不是一个整数索引,按属性创建顺序
    • 添加P作为键的最后一个元素
  • 对于作为符号的O的每个自己的属性键P,按属性创建顺序
    • 添加P作为键的最后一个元素
  • 归还钥匙
  • 因此,现在可以按照您的要求创建一个新对象,并按您希望的显示顺序向其添加属性:

    let numbers = { one : 1, two : 2, three : 3};
    numbers = Object.keys(numbers)
        .map((key) => ({key, value: numbers[key]}))
        .sort((a, b) => b.key.localeCompare(a.key))
        .reduce((acc, e) => {
          acc[e.key] = e.value;
          return acc;
        }, {});
    console.log(JSON.stringify(numbers));
    

    这是已排序的,不是无序排列,而是可以通过多种方式中的任意一种进行无序排列,如中所述

    这可以在ES2015+JavaScript引擎上运行。我并不是说(以这种方式使用属性顺序)这是一件值得做的事情。:-)

    你可能会说这有点像是对
    reduce
    的滥用,但它让我把所有这些都保留在一个大表达式中。(你可能会进一步争辩说,这对我来说是一件愚蠢的事情。:-)

    从ECMAScript 2015(ES2015,又称ES6)开始,对象属性(以前没有):

  • 让键成为一个新的空列表
  • 对于作为整数索引的O的每个自己的属性键P,按升序数字索引顺序
    • 添加P作为键的最后一个元素
  • 对于O的每个自己的属性键P,它是一个字符串,但不是一个整数索引,按属性创建顺序
    • 添加P作为键的最后一个元素
  • 对于作为符号的O的每个自己的属性键P,按属性创建顺序
    • 添加P作为键的最后一个元素
  • 归还钥匙
  • 因此,现在可以按照您的要求创建一个新对象,并按您希望的显示顺序向其添加属性:

    let numbers = { one : 1, two : 2, three : 3};
    numbers = Object.keys(numbers)
        .map((key) => ({key, value: numbers[key]}))
        .sort((a, b) => b.key.localeCompare(a.key))
        .reduce((acc, e) => {
          acc[e.key] = e.value;
          return acc;
        }, {});
    console.log(JSON.stringify(numbers));
    

    这是已排序的,不是无序排列,而是可以通过多种方式中的任意一种进行无序排列,如中所述

    这可以在ES2015+JavaScript引擎上运行。我并不是说(以这种方式使用属性顺序)这是一件值得做的事情。:-)


    你可能会说这有点像是对
    reduce
    的滥用,但它让我把所有这些都保留在一个大表达式中。(你可能会进一步争辩说,我这么做很愚蠢。:-)

    洗牌对象属性?为了什么目的?我的意思是:如果是为了可视化,那么就洗牌输出,而不是属性…它们在哪里并不重要(而且在JS顺序中也没有指定)。两个问题:1)你尝试过什么?2) 你为什么要这么做?我只是想知道是否有这种可能性。洗牌对象属性?为了什么目的?我的意思是:如果是为了可视化,那么就洗牌输出,而不是属性…它们在哪里并不重要(而且在JS顺序中也没有指定)。两个问题:1)你尝试过什么?2) 你为什么要这么做?我只是想知道是否有这种可能性。大多数引擎都不按字母顺序排序。几乎所有属性都使用属性添加到对象的顺序。不过,这是没有文件记录的(也不是很普遍)。正如你所说,根据规格,他们没有订单。依赖订单是个坏主意。:-)Oops——我习惯了PHP的
    rand
    和MySQL的
    rand
    ,以至于我一直忘了JS的
    Math。random
    是按顺序排列的。大多数引擎不按字母顺序排序。几乎所有属性都使用属性添加到对象的顺序。不过,这是没有文件记录的(也不是很普遍)。正如你所说,根据规格,他们没有订单。依赖订单是个坏主意。:-)Oops——我习惯了PHP的
    rand
    和MySQL的
    rand
    ,以至于我一直忘记了JS的
    Math。random
    是按顺序排列的。