如何对具有两个条件的列表进行排序

叶海亚·帕尔瓦

我有一个数组,我将选定的元素移动到顶部(就像它被固定一样),现在我想将它移回我比较 ID 的列表中之前的位置,所以想显示固定的元素(即确实有一个键pinned:true) 到数组的顶部,没有键的pinned: true将按 id 排序。

一切都按预期进行,除非我想将它们显示为按 id 排序,其中较小的 id 将排在顶部,而较大的将排在 (1,2,3,4...) 之后

这是一个沙箱,您可以在其中很好地了解正在发生的事情

https://codesandbox.io/s/serene-brattain-cro18?file=/src/App.tsx

const data = [
  { name: "Josef", id: 1 },
  { name: "Ali", id: 2 },
  { name: "Sheyda", id: 3 },
  { name: "Parviz", id: 4 },
  { name: "Victor", id: 5 },
  { name: "Mike", id: 6 },
  { name: "Ross", id: 7 },
  { name: "Chandler", id: 8 },
  { name: "Monica", id: 9 }
];
   data.sort(function (x,y) {
      return x.pinned === y.pinned ? 0 : x.pinned ? -1 : 1;
  });
   console.log(data)

所以关键是我希望带键的项目pinned:true 在第一个true当我点击它时得到哪个项目,当我点击它时它会变成假,默认情况下它是未定义的)和另一个键固定设置为false并且undefined会去在他们之下,将按 id 排序

目前我可以将它们按pinned:true顶部和另一个在它们下面进行排序,但我无法按 ID 对带有 false 的那些进行排序

开尔文·舒夫斯

您的问题是您只是根据一个元素是否被固定而另一个没有被固定来进行排序

在你的情况下,你基本上想要这样的东西:

// [value: number, pinned: boolean][]
const data = [];
for (let i = 0; i < 20; i++) {
    data.push([Math.random() * 100, Math.random() < 0.5]);
}

data.sort((a, b) => {
    const [aValue, aPinned] = a;
    const [bValue, bPinned] = b;
    if (aPinned !== bPinned) return  aPinned ? -1 : 1;
    return aValue - bValue;
});

console.log(data.map(([val, pinned]) => `${pinned ? '[!] ' : ''} ${val}`).join('\n'));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用两个键对Python列表进行排序,但只有一个键相反

如何使用Java中具有不同类的两个对象和具有compare字段的列表进行过滤

基于两个条件对列表进行排序的最佳算法是什么?

如何比较两个具有不同顺序的列表?

如何枚举具有两个“ for”的列表理解?

排序一个列表以使两个列表具有正确的顺序对应

如何通过两个属性和排序规则对对象列表进行排序

Hibernate CriteriaQuery如何查找具有两个条件的整数列表

如何在同一列表中具有两个不同的排序顺序?

如何绑定两个具有相同结构的列表?

在具有两个条件和id范围的两列之间进行计算

如何在python中对列表中的两个列表路径的字符串进行排序?

对具有不同错误类型的两个独立期货进行排序

如何使用两个属性对对象数组进行排序,但根据条件有条件地按排序顺序分组?

如何根据C#中的条件合并两个具有不同属性的列表

如何对具有特殊条件的列表元组进行排序?

列表理解有两个条件

具有两个元素的列表

Groovy-使用两个条件对我的对象列表进行排序

两个对象具有相同的排序条件

如何通过两个不同的键对列表进行排序?

如何合并两个具有字典的列表

使用两个或多个条件对列表的元素进行排序

通过每个选择中的两个不同列对具有两个选择的联合进行排序

如何进行一个查询,对两个条件的数据进行排序,然后从初始表/查询中添加与该条件对应的所有值?

如何按值对两个列表的字典进行排序

如何通过使用比较两个连续行的条件来对具有列表理解的数据框进行切片

如何依赖匹配具有两个元素的列表?

如何使用两个条件在 Python 中对列表进行排序?