【发布时间】:2019-12-19 01:03:52
【问题描述】:
是否可以颠倒项目在 svelte 的 {#each ...} 块中的显示顺序?
我想要一个对象数组,按 id 排序,最旧的条目排在第一位。我想先显示最新的条目。
【问题讨论】:
-
我可能有另一种选择;在将原始数组馈送到 {#each ..} 块之前先反转原始数组,但我认为在显示时进行反转可能更容易。
标签: javascript svelte-3
是否可以颠倒项目在 svelte 的 {#each ...} 块中的显示顺序?
我想要一个对象数组,按 id 排序,最旧的条目排在第一位。我想先显示最新的条目。
【问题讨论】:
标签: javascript svelte-3
查看我尝试过的文档:
<script>
let cats = [
{ id: 'J---aiyznGQ', name: 'Keyboard Cat' },
{ id: 'z_AbfPXTKms', name: 'Maru' },
{ id: 'OUtn3pvWmpg', name: 'Henri The Existential Cat' }
];
</script>
<h1>The Famous Cats of YouTube</h1>
<ul>
{#each [...cats].reverse() as { id, name }, i}
<li><a target="_blank" href="https://www.youtube.com/watch?v={id}">
{i + 1}: {name}
</a></li>
{/each}
</ul>
似乎有效...试试看here
[...cats].reverse() 的原因是我们避免反转实际的猫数组,而只是反转一个副本
【讨论】:
答案是,通过在 {#each} 中进行 tweeking 来实施解决方案是困难的,也许是不可能的。就像 dbramwell 建议的那样,我在脚本中完成工作。代码可能需要一些改进/重构!
function reverseTodos() {
let indexArr = [];
for (const todo of todos) {
indexArr.push(todo.id);
}
indexArr.reverse();
let myNewArr = [];
for (let i = 0; i < todos.length; i++) {
myNewArr[i] = {
id: indexArr[i],
todo: todos[i].todo,
checkbox: todos[i].checkbox
};
}
return myNewArr.reverse();
}
$: reversedTodos = reverseTodos();
然后我将 reversedTodos 提供给 {#each} 块。
【讨论】: