如何在 JS 中将 objects 的数组分成 3 个部分进行排序?
How to sort array of objects in 3 parts in JS?
我需要按以下方式对 objects 的数组进行排序:
第一个应该是 objects,其中收藏夹数组仅包含一项
第二个应该显示 objects,其中收藏夹数组未定义或为空
第 3 个收藏夹数组有超过 1 个项目
objects 的总数组如下所示:
[
{
rentalName:
rentalAdress:
favorites:[]
...
}
]
我在这里找到了类似的解决方案,但这种排序不适用于上述情况:
function sortBy(selector) {
const cmp = (a, b) => (selector(a) - selector(b));
return list => list.sort(cmp);
}
const data = [{ rentalName: "Foo", favorites:[{}, {}, {}] }, { rentalName: "Bar", favorites:[{}] }, { rentalName: "Baz", favoriteslikes:[{}] }, { Name: "Plugh", favorites:[] }];
const sortByLikes = sortBy(({ favorites }) => favorites.length);
console.log(sortByLikes(data));
如何按照上面的解释将 objects 的数组分为 3 个部分进行排序?
这不是排序,它是对不同的元素进行分组。
使用 forEach
循环并根据条件将对象推送到不同的数组。
function groupByFavorites(array) {
let result = {
none: [],
one: [],
multiple: []
};
array.forEach(o => {
if (!o.favorites) { // undefined or empty
result.none.push(o);
} else if (o.favorites.length == 1) {
result.one.push(o);
} else {
result.multiple.push(o);
}
return result;
});
}
您可以为每个案例分配一个编号,应该先排在前面的案例的编号较小,然后在比较时将两者相减。
function sortBy() {
const getOrder = ({favorites})=>favorites?.length === 1 ? 0 : !favorites?.length ? 1 : 2;
const cmp = (a, b) => (getOrder(a) - getOrder(b));
return list => list.sort(cmp);
}
const data = [{ rentalName: "Foo", favorites:[{}, {}, {}] }, { rentalName: "Bar", favorites:[{}] }, { rentalName: "Baz", favoriteslikes:[{}] }, { Name: "Plugh", favorites:[] }];
const sortByLikes = sortBy();
console.log(sortByLikes(data));
我需要按以下方式对 objects 的数组进行排序:
第一个应该是 objects,其中收藏夹数组仅包含一项 第二个应该显示 objects,其中收藏夹数组未定义或为空 第 3 个收藏夹数组有超过 1 个项目
objects 的总数组如下所示:
[
{
rentalName:
rentalAdress:
favorites:[]
...
}
]
我在这里找到了类似的解决方案,但这种排序不适用于上述情况:
function sortBy(selector) {
const cmp = (a, b) => (selector(a) - selector(b));
return list => list.sort(cmp);
}
const data = [{ rentalName: "Foo", favorites:[{}, {}, {}] }, { rentalName: "Bar", favorites:[{}] }, { rentalName: "Baz", favoriteslikes:[{}] }, { Name: "Plugh", favorites:[] }];
const sortByLikes = sortBy(({ favorites }) => favorites.length);
console.log(sortByLikes(data));
如何按照上面的解释将 objects 的数组分为 3 个部分进行排序?
这不是排序,它是对不同的元素进行分组。
使用 forEach
循环并根据条件将对象推送到不同的数组。
function groupByFavorites(array) {
let result = {
none: [],
one: [],
multiple: []
};
array.forEach(o => {
if (!o.favorites) { // undefined or empty
result.none.push(o);
} else if (o.favorites.length == 1) {
result.one.push(o);
} else {
result.multiple.push(o);
}
return result;
});
}
您可以为每个案例分配一个编号,应该先排在前面的案例的编号较小,然后在比较时将两者相减。
function sortBy() {
const getOrder = ({favorites})=>favorites?.length === 1 ? 0 : !favorites?.length ? 1 : 2;
const cmp = (a, b) => (getOrder(a) - getOrder(b));
return list => list.sort(cmp);
}
const data = [{ rentalName: "Foo", favorites:[{}, {}, {}] }, { rentalName: "Bar", favorites:[{}] }, { rentalName: "Baz", favoriteslikes:[{}] }, { Name: "Plugh", favorites:[] }];
const sortByLikes = sortBy();
console.log(sortByLikes(data));