【问题标题】:Sort object by key in descending order按降序对对象进行排序
【发布时间】:2018-10-27 07:00:52
【问题描述】:

这对我来说是一个简单但最痛苦的问题。

以下面的sn-p代码为例:

const test = {};
test[2] = 'value2';
test[1] = 'value1';
console.log(test);

上面sn-p的结果是:

{
  1: "value1",
  2: "value2"
}

我想传递这个对象,结果如下:

{
  2: "value2",
  1: "value1"
}

PS: 我试过 Object.keys(test).sort()Object.keys(test).reverse() 和然后将它与重新创建对象的函数链接起来,但似乎没有什么对我有用。

【问题讨论】:

  • 很确定这是不可能的,因为数字属性总是按数字顺序列出,不是吗?但我认为,属性顺序不是任何好的代码都应该依赖的东西
  • 如果你想传递对象本身,不要认为这是可能的,尽管如果你想传递对象的序列化版本是可能的。 (虽然,在反序列化时,如果接受它是基于 JS 的,它会变成纯数字顺序)听起来你应该改用数组,也许
  • Object.keys(test).sort().reverse()
  • 它只会反转键,但我希望键和值都符合预期的格式。
  • 不要发送您选择的对象,而是按原样发送对象,并在处理它的方法中按照您的需要进行处理。在关联数组的情况下,顺序始终是随机的。或者,将关联数组转换为对象数组,并将它们转换为您的函数需要的方式。

标签: javascript sorting object


【解决方案1】:

我检查了这一点,您可以使用类似的东西将您的键和值扩展到另一个对象

{键:“”,值:“”}

const test = {};
test[2] = 'value2';
test[1] = 'value1';
test[4] = 'value4';

var r = Object.keys(test).sort().reverse()
console.log(r);

var sorted ={}

//look like JS Sorted this ASC

  r.forEach(k => {
        sorted[k] = test[k]
    });

console.log(JSON.stringify(sorted));

// So use Array

var sorted =[]


  r.forEach(k => {
        sorted.push({"key":k ,"value": test[k]})
    });

console.log(JSON.stringify(sorted));

【讨论】:

    【解决方案2】:

    使用正整数键是不可能的。它可能适用于大多数带有非正整数键的浏览器(但可能不是全部):[-2][.2]['2 '] 等。

    const obj = { '2 ': "value2", '1 ': "value1" };
    
    console.log(obj);
    
    console.log( JSON.stringify(obj, 0, 2).replace(/ ": "/g, '": "') );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2014-02-16
      • 2012-02-19
      • 2011-01-09
      相关资源
      最近更新 更多