我有一个数组,我将选定的元素移动到顶部(就像它被固定一样),现在我想将它移回我比较 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] 删除。
我来说两句