【问题标题】:Sorting JSON object by value of bool in JavaScript在 JavaScript 中按布尔值对 JSON 对象进行排序
【发布时间】:2021-06-21 03:24:00
【问题描述】:

我是 JavaScript 新手,我正在尝试使用从 API 获得的 JSON 对象,并且我正在尝试找到一种方法,如何通过内部的 bool 值对其进行排序。我有一种感觉,这个问题已经得到了回答,但是我找不到按照我的方式去做的方法。

这是我的回复(这是我的 API,因此我可以根据需要更改数据类型并添加值)

[
    {
        "name":"Name 1",
        "photoUrl":"Photo url 1",
        "bool": false
    },
    {
        "name":"Name 2",
        "photoUrl":"Photo url 2",
        "bool": false
    },
    {
        "name":"Name 3",
        "photoUrl":"Photo url 3",
        "bool": true
    },
    {
        "name":"Name 4",
        "photoUrl":"Photo url 4",
        "bool": false
    },
    {
        "name":"Name 5",
        "photoUrl":"Photo url 5",
        "bool": true
    }
]

我想要顶部带有bool: true 的对象,底部带有bool: false 的对象。 我自己找不到办法。感谢您的帮助。

【问题讨论】:

  • 您提供的 JSON 不是数组。
  • 澄清一下,每个对象的数量是否需要保持不变?还是它们只是表示当前的顺序而对您来说无关紧要?
  • @Arcteezy 他们没有断言它是一个数组
  • @Sean 是的。但是对对象中值的顺序进行排序没有任何意义。
  • @Sean 不,他们不必保持不变

标签: javascript json sorting object


【解决方案1】:

你可以使用Array.prototype.sort()

array.sort(function(a,b){return b.bool-a.bool});

console.log(array);

如果你想要相反的顺序,

array.sort(function(a,b){return a.bool-b.bool});

【讨论】:

  • @Andy 是的。为什么?
【解决方案2】:

首先,使用Object.entries 解构键值对API 响应。 sort通过bool取值再用reduce构造排序结果

const obj = {
    "0":{
        "name":"Name 1",
        "photoUrl":"Photo url 1",
        "bool": false
    },
    "1":{
        "name":"Name 2",
        "photoUrl":"Photo url 2",
        "bool": false
    },
    "2":{
        "name":"Name 3",
        "photoUrl":"Photo url 3",
        "bool": true
    },
    "3":{
        "name":"Name 4",
        "photoUrl":"Photo url 4",
        "bool": false
    },
    "4":{
        "name":"Name 5",
        "photoUrl":"Photo url 5",
        "bool": true
    }
}

const sorted = Object.entries(obj).sort( ([a_k, a_v], [b_k, b_v]) => b_v.bool - a_v.bool).reduce((acc, curr, idx) => Object.assign(acc, {[idx]: curr[1]}), {});
console.log(sorted);

更新

const list = [
    {
        "name":"Name 1",
        "photoUrl":"Photo url 1",
        "bool": false
    },
    {
        "name":"Name 2",
        "photoUrl":"Photo url 2",
        "bool": false
    },
    {
        "name":"Name 3",
        "photoUrl":"Photo url 3",
        "bool": true
    },
    {
        "name":"Name 4",
        "photoUrl":"Photo url 4",
        "bool": false
    },
    {
        "name":"Name 5",
        "photoUrl":"Photo url 5",
        "bool": true
    }
];
list.sort((a,b) => b.bool - a.bool);
console.log(list);

【讨论】:

    【解决方案3】:

    这是你需要的:

    [...].sort(a => a.bool ? -1 : 1)
    

    -1 会将所有对象放在数组的开头,其中 'bool' 为真

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 2010-10-28
      • 2016-07-09
      • 2011-11-16
      • 2021-04-03
      • 2021-09-16
      • 2021-10-13
      • 2011-05-12
      • 2013-07-15
      相关资源
      最近更新 更多