gpt4 book ai didi

javascript - 如何根据多个条件对对象数组重新排序?

转载 作者:行者123 更新时间:2023-12-02 23:53:58 81 4
gpt4 key购买 nike

我正在尝试使用 Array.prototype.sort() 方法对数组或对象重新排序。

我的对象数组可能看起来像这样(我已经从现实生活场景中删除了不相关的属性):

[
{
context: [
{ value: 'hover' }
]
},
{
context: []
},
{
context: [
{ value: 'active' }
]
},
{
context: [
{ value: 'large' }
]
}
]

我需要根据 context 属性的嵌套对象中包含的值对对象重新排序。

条件是:

  • 如果没有上下文对象,则移至数组开头
  • 如果上下文对象包含 hover 值,则移至数组末尾

因此上面的 4 个对象数组应该从 [1, 2, 3, 4] 重新排序为 [2, 3, 4, 1]

我可以通过以下方式满足第一个条件:

rules.sort((a, b) => {
return (a.context.length - b.context.length);
});

...它根据上下文对象的数量重新排序数组(从而满足第一个条件),但我不知道如何满足第二个条件。

我能够确定 ab 数组是否包含具有 hover 值的上下文对象,这感觉很好开始,但我不知道从这里去哪里......

rules.sort((a, b) => {
const AIsHover = a.context.some(c => c.value === 'hover');
const BIsHover = b.context.some(c => c.value === 'hover');

return (a.context.length - b.context.length);
});

任何帮助将不胜感激!谢谢

最佳答案

您只需区分情况即可实现这一点:

rules.sort((a, b) => {
if (!a.context.length && !b.context.length) {
return 0;
}
if (a.context.length && !b.context.length) {
return 1;
}
if (!a.context.length && b.context.length) {
return -1;
}
if (a.context.some(c => c.value === 'hover') && b.context.some(c => c.value === 'hover')) {
return 0;
}
if (a.context.some(c => c.value === 'hover')) {
return 1;
}
if (b.context.some(c => c.value === 'hover')) {
return -1;
}
return 0;
});

关于javascript - 如何根据多个条件对对象数组重新排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495298/

81 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com