gpt4 book ai didi

javascript - Svelte 派生存储和数组排序

转载 作者:行者123 更新时间:2023-11-28 03:21:53 26 4
gpt4 key购买 nike

我设置了一个商店,其中包含从我的 API 加载的游乐设施列表:

const loadRides = () => client.service('rides').find({
query: {
$sort: {
date: -1,
}
}
});

const createRides = () => {
const { subscribe, update } = writable([], async (set) => {
try {
const rides = await loadRides().then((result) => result.data);
set(rides);
} catch (e) {
console.error(e);
}
// Socket update binding?
});

subscribe((rides) => console.debug('rides', rides));

return {
subscribe,
refresh: () => loadRides().then((result) => update(() => result.data)),
};
};
export const rides = createRides();

然后我为过去和 future 的游乐设施设置了两个派生商店:

export const pastRides = derived(
rides,
($rides) => $rides
.filter((ride) => ride.steps.every((step) => step.doneAt))
,
);
export const comingRides = derived(
rides,
($rides) => $rides
.filter((ride) => ride.steps.some((step) => !step.doneAt))
.sort((rideA, rideB) => {
const compare = new Date(rideA.date) - new Date(rideB.date);
console.log(rideA.date, rideB.date, compare);
return compare;
})
,
);

第二个方法上的 sort 方法没有任何效果。

所以我尝试将此方法放在 filter 方法之前。它可以工作,但它也会对 $pastRides 进行排序。事实上,它正在对完整的 $rides 数组进行排序,并且它很有意义。

但我不明白为什么 filter 之后的 sort 不起作用。

我错过了什么?

最佳答案

Array.sort是可变的。意思是,当您调用rides.sort时,它将排序并修改 rides并返回排序后的rides .

当您使用derived(rides, ($rides) => ... )时,$rides您收到的是原件rides您称为 set(rides) 的数组。所以你可以想象 pastRidescomingRides收到同样的$rides数组。

您可以在 this repl 中观察到此行为

两者兼而有之derived互相干扰,可以创建一个新数组并对新数组进行排序:

const sorted_1 = derived(array, $a => [...$a].sort());

您可以在 this repl 中尝试此操作.

关于javascript - Svelte 派生存储和数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59076474/

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