【发布时间】:2021-08-04 20:54:12
【问题描述】:
以下简化示例有效,但不确定它是否是最有效的方法,因为我在 Svelte 中的每个迭代块中多次调用 getLocation():
<script>
export let schedule = {
locations: [
{
_id: 1,
name: 'Boston',
parking: 'Onstreet'
},
{
_id: 2,
name: 'New York',
parking: 'Paid lot'
}
],
sections: [
{
locationId: 2,
day: 1
},
{
locationId: 1,
day: 2
}
]
}
function getLocation(id) {
return schedule.locations.find( ({ _id }) => _id === id )
}
</script>
<template>
{#each schedule.sections as section}
<p>{getLocation(section.locationId).name} {getLocation(section.locationId).parking}</p>
{/each}
</template>
我可以使用的其他方法:
- 使用 locationId 作为键和 location 对象作为值填充 Map 对象,并在每个块中引用它。正在考虑它可能有更多的开销,因为我必须构建地图然后每次都通过键查找值。
- 在显示之前通过向部分对象添加位置属性来非规范化数据。当我传入数据时,不想对其进行变异或克隆的开销。
- 这个看起来很容易,但由于迭代可能效率较低...创建一个单元素数组,其中包含从 getLocation() 返回的位置对象,并使用内部每个块来访问这样的位置属性.. .
<template>
{#each schedule.sections as section}
{#each [getLocation(section.locationId)] as location}
<p>{location.name} {location.parking}</p>
{/each}
{/each}
</template>
我是 Svelte 的新手。对最有效的方法有什么想法吗?我的第一种方法是不是最好的(或者我离基地还很远)?
【问题讨论】:
标签: arrays object each svelte svelte-3