【问题标题】:How do I sort a nested array alphabetically without affecting the order of the outer array of objects?如何在不影响外部对象数组的顺序的情况下按字母顺序对嵌套数组进行排序?
【发布时间】:2019-12-01 16:42:56
【问题描述】:

我有一个名为“Inventory”的对象数组。每个库存对象都有一个 order 属性,我按升序对它进行数字排序。每个库存对象中都有一组车辆。在这个数组中存在一个模型属性,它也是一个数组。

    inventory: [
     {
       category: American,
       order: 1,
       vehicles: [
        {
          instock: 'yes',
          model: [
             {
               lang: 'en-US'
               title: 'mustang'
             }
          ]
        }
     ],
     [
        {
          instock: 'no',
          model: [
             {
               lang: 'en-US'
               title: 'viper'
             }
          ]
        }
     ],
     [
        {
          instock: 'yes',
          model: [
             {
               lang: 'en-US'
               title: 'camaro'
             }
          ]
        }
     ]


    }
   ]

我正在尝试编写一种方法,该方法根据“顺序”保持库存数组的整体排序,但根据模型数组中“标题”属性的字母顺序对“车辆”数组进行排序。

到目前为止,我有这种方法,它只对“库存”对象的顺序进行排序。我不确定我是否可以以某种方式链接一个加法排序方法,然后对车辆数组进行排序。

 const sortedInventory = inventory.sort((a, b) => {
        if (a.order < b.order) return -1;
        if (a.order > b.order) return 1;
        return 0;
      })

【问题讨论】:

  • inventory.vehicles.sort(someFunction),完全一样,对外部数组没有影响。
  • 我是否链接另一个排序方法并向下钻取适当的数组?举个例子会有所帮助。
  • vehicles 数组完全独立于外部数组;您必须遍历每个 inventory 对象并对 vehicles 数组进行一一排序;你不能同时对它们进行排序。可能是我不明白你想做什么。
  • 是的,这就是我想要完成的目标
  • 你能补充一下预期结果的样子吗?

标签: javascript arrays sorting object vue.js


【解决方案1】:

您可以循环浏览您的库存清单并对每个库存的车辆进行分类,而不会影响库存的初始顺序;

更新 根据 OP 的评论编辑答案。

for (const inv of inventory) {
     inv.vehicles.sort((a, b) => { 
             if (a.model[0].title < b.model[0].title) return 1;
             if (a.model[0].title > b.model[0].title) return -1;
             return 0;
         });
}

【讨论】:

  • 我实际上并没有尝试对模型数组进行排序。我正在尝试根据标题的字母顺序对车辆数组进行排序。 IE vehicle[i].model[0].title.. 根据我的数据,模型数组中总是只有一个对象。但是,车辆数组中可以有多个对象。
  • 使用此解决方案获取“[object Object] 不可迭代”
  • @LDB​​ 您的 JSON 似乎有问题。例如,一个数组在第 16 行打开,它不是清单对象的属性。确保 inventory 是正确的清单对象列表,并且上面的代码应该可以正常工作
  • 谢谢。我的意思是编辑我的最后一条评论。此解决方案有效,我已接受答案。
猜你喜欢
  • 2019-06-15
  • 2021-01-03
  • 2016-04-28
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 2021-09-25
  • 2013-11-02
相关资源
最近更新 更多