【问题标题】:How to sort array of objects by dynamic proprety name?如何按动态属性名称对对象数组进行排序?
【发布时间】:2021-09-05 15:31:09
【问题描述】:

感谢您的帮助或想法如何按第一个值升序对对象数组进行排序。

这是数组

[{"0":"yanni"},
{"1150":"finally"},
{"852":"discovered"},
{"59":"what"},
{"30064":"had"},
{"397":"really"},
{"3100":"happened"},
{"3":"to"},
{"0":"skura"},
{"7523":"lets"},
{"6550":"try"},
]

我想按第一个数字排序:

[{"0":"yanni"},
{"0":"skura"},
{"3":"to"},
{"59":"what"},
.....
]

我试过这样

const keys = Object.keys(sentenceFreq);
  console.log("key",keys)
  const valuesIndex = keys.map((key) => ({key, value: sentenceFreq[key]}));

  valuesIndex.sort((a, b) => b.value - a.value); // reverse sort

  const newObject = {};

  for (const item of valuesIndex) {
    newObject[item.key] = item.value;
  }
  console.log("test", newObject);

但它们仅按键值排序...

任何帮助是appericated。 谢谢!

【问题讨论】:

  • 它应该按从0开始的数字排序,所以0之后的最小数字是3然后是59..

标签: javascript node.js arrays sorting


【解决方案1】:

使用sort。获取abObject.keys 的第一个元素并将它们强制为整数,然后返回新的排序顺序。

const arr = [{"0":"yanni"},{"1150":"finally"},{"852":"discovered"},{"59":"what"},{"30064":"had"},{"397":"really"},{"3100":"happened"},{"3":"to"},{"0":"skura"},{"7523":"lets"},{"6550":"try"}];

arr.sort((a, b) => {
  const first = +Object.keys(a)[0];
  const second = +Object.keys(b)[0];
  return first - second;
});

console.log(arr);

【讨论】:

  • 谢谢.. 正确的first-second 给出了正确的结果
  • 只是减去会强制值。
【解决方案2】:

默认情况下,sort 方法按字母顺序对元素进行排序。但是在您的情况下,您可以获取键并尝试进行数字排序,只需添加一个处理数字排序的新方法(如下所示)-

let arr = [{
  "0": "yanni"
}, {
  "1150": "finally"
}, {
  "852": "discovered"
}, {
  "59": "what"
}, {
  "30064": "had"
}, {
  "397": "really"
}, {
  "3100": "happened"
}, {
  "3": "to"
}, {
  "0": "skura"
}, {
  "7523": "lets"
}, {
  "6550": "try"
}];

arr.sort(function(a, b) {
  const first = +Object.keys(a)[0];
  const second = +Object.keys(b)[0];
  return first - second
});

console.log(arr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多