如何解决如何在JS中将对象数组分为3个部分?
我需要通过以下方式对对象数组进行排序:
第一个应该是收藏夹数组仅包含一项的对象 应该显示第二个对象,其中收藏夹数组未定义或为空 第三收藏夹数组中有超过1个项目
对象的总数组如下所示:
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));
我在这里找到了类似的解决方案,但是这种排序不适用于上述情况:
$(function(){
const Ps = new PerfectScrollbar();
$(".button-collapse").sideNav();
var sideNavScrollbar = document.querySelector('.custom-scrollbar');
Ps.initialize(sideNavScrollbar);
})
如何按照上面的说明将对象数组分为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));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。