【问题标题】:JS: sort the value of 0 to last elementJS:将0的值排序到最后一个元素
【发布时间】:2023-01-16 14:48:28
【问题描述】:

我该如何制作物品

由此:

[
  {
    name: 'Honda,
    inventory: 5,
  },
{
    name: 'Lambo',
    inventory: 0,
  },
  {
    name: 'Toyota',
    inventory: 10,
  },
  
]

对此:

[
  {
    name: 'Honda,
    inventory: 5,
  },
  {
    name: 'Toyota',
    inventory: 10,
  },
  {
    name: 'Lambo',
    inventory: 0,
  },
]

此代码未按预期排序:


const newItems = [...items].sort((a, b) => {
                if (a.inventory === b.inventory) return 0;
        
                if (a.inventory === 0) return 1;
                
                return -1;
            });

            console.log(newItems);

结果:

[
    {
        "name": "Toyota",
        "inventory": 10
    },
    {
        "name": "Honda",
        "inventory": 5
    },
    {
        "name": "Lambo",
        "inventory": 0
    }
]
}

注意丰田是第一而不是第二。 我只想将 0 的库存放在最后一个元素。目前它排序降序(10-0)这不是它的工作方式

【问题讨论】:

    标签: javascript


    【解决方案1】:

    取被迭代的一项或另一项是否为 0 的差值。

    const items = [
      {
        name: 'Honda',
        inventory: 5,
      },
    {
        name: 'Lambo',
        inventory: 0,
      },
      {
        name: 'Toyota',
        inventory: 10,
      }, 
    ]
    const newItems = [...items].sort((a, b) => (a.inventory === 0) - (b.inventory === 0));
    console.log(newItems);

    如果您想按升序对其余部分进行排序(不考虑原始排序顺序),则在之后取普通 .inventorys 的差值。

    const items = [
      {
        name: 'Honda',
        inventory: 5,
      },
    {
        name: 'Lambo',
        inventory: 0,
      },
      {
        name: 'Toyota',
        inventory: 10,
      }, 
    ]
    const newItems = [...items].sort((a, b) =>
      (a.inventory === 0) - (b.inventory === 0)
      || a.inventory - b.inventory
    );
    console.log(newItems);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2021-07-10
      • 2010-12-28
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多