按嵌套键值对对象数组进行排序

uka*_*ric 1 javascript arrays sorting

我有originalArray包含对象。我将如何inventory按键值对数组进行排序short

var originalArray = [
  {
    name: 'Store1',
    inventory: [
      { name: 'Oranges', qt: { short: 11, long: 3, med: 9 } },
      { name: 'Mango', qt: { short: 3, long: 91, med: 3 } },
      { name: 'Kiwi', qt: { short: 2, long: 91, med: 3 } },
      { name: 'Papaya', qt: { short: 8, long: 91, med: 3 } }
    ]
  },
  {
    name: 'Store2',
    inventory: [
      { name: 'Pizza', qt: { short: 31, long: 11, med: 23 } },
      { name: 'Burger', qt: { short: 1, long: 11, med: 23 } },
      { name: 'IceCream', qt: { short: 111, long: 11, med: 323 } }
    ]
  }
];
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

var sorted = [
  {
    name: 'Store1',
    inventory: [
      { name: 'Kiwi', qt: { short: 2, long: 91, med: 3 } },
      { name: 'Mango', qt: { short: 3, long: 91, med: 3 } },
      { name: 'Papaya', qt: { short: 8, long: 91, med: 3 } },
      { name: 'Oranges', qt: { short: 11, long: 3, med: 9 } }
    ]
  },
  {
    name: 'Sotre2',
    inventory: [
      { name: 'Burger', qt: { short: 1, long: 11, med: 23 } },
      { name: 'Pizza', qt: { short: 31, long: 11, med: 23 } },
      { name: 'IceCream', qt: { short: 111, long: 11, med: 323 } }
    ]
  }
];
Run Code Online (Sandbox Code Playgroud)

除了inventoryshort值排序的数组之外,我不需要任何东西。

inventoryarray 的所有项都按 dsc 顺序排序。性能不是问题,语言规范限制也不是问题,唯一的限制是我不能使用外部库。

有没有一种理智的方法可以做到这一点,或者我需要在inventory中间变量中对其进行排序并创建带有inventorysorted 的新对象数组。

Igo*_*gor 8

var originalArray = [
  {
    name: 'Store1',
    inventory: [
      { name: 'Oranges', qt: { short: 11, long: 3, med: 9 } },
      { name: 'Mango', qt: { short: 3, long: 91, med: 3 } },
      { name: 'Kiwi', qt: { short: 2, long: 91, med: 3 } },
      { name: 'Papaya', qt: { short: 8, long: 91, med: 3 } }
    ]
  },
  {
    name: 'Store2',
    inventory: [
      { name: 'Pizza', qt: { short: 31, long: 11, med: 23 } },
      { name: 'Burger', qt: { short: 1, long: 11, med: 23 } },
      { name: 'IceCream', qt: { short: 111, long: 11, med: 323 } }
    ]
  }
];

for (var i = 0; i < originalArray.length; i++) {
  originalArray[i].inventory.sort(function(a, b) { return a.qt.short - b.qt.short; });
}

console.log(originalArray);
Run Code Online (Sandbox Code Playgroud)