var originalArray = [
{
name: 'Store1',
inventory: [
{ name: 'Oranges', qt: [{ id: "something", time: 11 }, { id: "something", time: 44 }, { id: "something", time: 53 }] },
{ name: 'Mango', qt: [{ id: "something", time: 3 }, { id: "something", time: 91 }, { id: "something", time: 3 }] },
{ name: 'Kiwi', qt: [{ id: "something", time: 2 }, { id: "something", time: 91 }, { id: "something", time: 3 }] },
{ name: 'Papaya', qt: [{ id: "something", time: 8 }, { id: "something", time: 91 }, { id: "something", time: 3 }] }
]
},
{
name: 'Store2',
inventory: [
{ name: 'Pizza', qt: [{ id: "something", time: 31 }, { id: "something", time: 11 }, { id: "something", time: 23 }] },
{ name: 'Burger', qt: [{ id: "something", time: 1 }, { id: "something", time: 11 }, { id: "something", time: 23 }] },
{ name: 'IceCream', qt: [{ id: "something", time: 111 }, { id: "something", time: 11 }, { id: "something", time: 323 }] }
]
}
];
例如在上面的数组中,inventory
和 qt
是嵌套键,以对象数组作为其值。
Store2
的 { id: "something", time: 323 }
比 Store1
中的任何项目的时间都长
排序后,Store2
排在第一位,Store1
排在第二位,依此类推,时间递减
我的代码无法对商店进行排序。
它不应该对库存和 qt 中的嵌套数组进行排序,只需按时间降序对 Store order 进行排序
const sorted = originalArray
.map(store => store.inventory
.map(inv => inv.qt
.map(item => Object.entries(item)[1])))
.sort((a, b) => b[1].time - a[1].time)
.map(item => item[1])
console.log(JSON.stringify(sorted));
预期输出
// sorted array
[
{
name: 'Store2',
inventory: [
{ name: 'Pizza', qt: [{ id: "something", time: 31 }, { id: "something", time: 11 }, { id: "something", time: 23 }] },
{ name: 'Burger', qt: [{ id: "something", time: 1 }, { id: "something", time: 11 }, { id: "something", time: 23 }] },
{ name: 'IceCream', qt: [{ id: "something", time: 111 }, { id: "something", time: 11 }, { id: "something", time: 323 }] }
]
},
{
name: 'Store1',
inventory: [
{ name: 'Oranges', qt: [{ id: "something", time: 11 }, { id: "something", time: 44 }, { id: "something", time: 53 }] },
{ name: 'Mango', qt: [{ id: "something", time: 3 }, { id: "something", time: 91 }, { id: "something", time: 3 }] },
{ name: 'Kiwi', qt: [{ id: "something", time: 2 }, { id: "something", time: 91 }, { id: "something", time: 3 }] },
{ name: 'Papaya', qt: [{ id: "something", time: 8 }, { id: "something", time: 91 }, { id: "something", time: 3 }] }
]
}
]
答案 0 :(得分:1)
这不是最有效的方法,但它可以完成工作
var originalArray = [
{
name: 'Store1',
inventory: [
{ name: 'Oranges', qt: [{ id: "something", time: 11 }, { id: "something", time: 44 }, { id: "something", time: 53 }] },
{ name: 'Mango', qt: [{ id: "something", time: 3 }, { id: "something", time: 91 }, { id: "something", time: 3 }] },
{ name: 'Kiwi', qt: [{ id: "something", time: 2 }, { id: "something", time: 91 }, { id: "something", time: 3 }] },
{ name: 'Papaya', qt: [{ id: "something", time: 8 }, { id: "something", time: 91 }, { id: "something", time: 3 }] }
]
},
{
name: 'Store2',
inventory: [
{ name: 'Pizza', qt: [{ id: "something", time: 31 }, { id: "something", time: 11 }, { id: "something", time: 23 }] },
{ name: 'Burger', qt: [{ id: "something", time: 1 }, { id: "something", time: 11 }, { id: "something", time: 23 }] },
{ name: 'IceCream', qt: [{ id: "something", time: 111 }, { id: "something", time: 11 }, { id: "something", time: 323 }] }
]
}
];
const sorted = originalArray.slice().sort((a, b) => {
maxA = Math.max(...a.inventory.flatMap(({qt})=>qt.map(({time})=>time)));
maxB = Math.max(...b.inventory.flatMap(({qt})=>qt.map(({time})=>time)));
return maxB-maxA
});
console.log(sorted);
答案 1 :(得分:1)
这应该有效:
const highestTime = (inventory) => {
let max = 0;
for (const item of inventory) {
for (const obj of item.qt) {
if (obj.time > max) max = obj.time;
}
}
return max;
};
const sortedArray = originalArray.sort((a, b) => highestTime(b.inventory) - highestTime(a.inventory));