You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte中如何从JSON数据源按ID获取指定对象数据

SvelteKit 按指定id匹配单个JSON对象实现方案

核心用JS原生Array.find()方法实现,该方法找到第一个符合条件的项后会立刻终止遍历,不会跑完整个数组,完全满足不做全量遍历的要求。


固定id匹配实现(例如固定取id=2的项目)

直接在组件内拿到全量projects数组后做筛选即可,代码如下:

<script context="module">
    export const load = async ({ fetch }) => {
        const res = await fetch("https://amarton.github.io/amcom-portfolio-svelte/static/port.json");
        const projects = await res.json();
        return {
            props: {
                projects,
            }
        }
    }
</script>

<script>
    export let projects;
    // 匹配id等于2的项目,无匹配项时返回undefined
    const currentProject = projects.find(item => item.id === 2);
</script>

<!-- 渲染部分加兜底判断,避免匹配失败时报错 -->
{#if currentProject}
    <h2>{currentProject.title}</h2>
    <p>{currentProject.body}</p>
{:else}
    <p>对应项目不存在</p>
{/if}

动态id匹配实现(详情页常用场景)

如果是做项目详情页,id从路由参数动态获取(比如路由格式为/project/[id]),可以直接在load函数里完成筛选,不需要把全量projects数组传给页面组件,性能更好:

<script context="module">
    export const load = async ({ fetch, params }) => {
        const res = await fetch("https://amarton.github.io/amcom-portfolio-svelte/static/port.json");
        const projects = await res.json();
        // URL取的参数默认是字符串,要转成数字和JSON里的id类型保持一致
        const targetId = Number(params.id);
        const currentProject = projects.find(item => item.id === targetId);
        
        return {
            props: {
                currentProject
            },
            // 匹配不到项目时返回404状态码
            status: currentProject ? 200 : 404
        }
    }
</script>

<script>
    export let currentProject;
</script>

<!-- 渲染逻辑和上面一致 -->
{#if currentProject}
    <h2>{currentProject.title}</h2>
    <p>{currentProject.body}</p>
{:else}
    <p>对应项目不存在</p>
{/if}

注意事项:做id匹配时必须保证对比的两个值类型一致,比如JSON中id是数字类型,就不要直接用字符串类型的id去匹配,否则会出现匹配失效的问题。

内容的提问来源于stack exchange,提问作者amarton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:09:25