使用映射中的值填充 select 输入,其中键来自另一个 select 输入

filling select input using the value from a map where the key is from another select input

小问题: 我有一个国家列表和一个下拉菜单,人们可以在其中 select 多个国家。 我有一张地图,其中地图的每个键都是一个国家名称,国家的每个值都是一个城市。 我想在选项中添加 selected 国家/地区的城市,动态地。

如何操作?

<script>
    $: countries_chosen = []
    $: cities_chosen = []
    let countries = ["france", "spain", "germany"]
    let cities = []
    let all_cities = {
        "france": ["paris", "bordeau"],
        "spain": ["barcelona", "madrid"],
        "germany": ["berlin", "frankfurt"]
    }
    $: console.log(countries_chosen)
    $: console.log(cities_chosen)
</script>

 <h1>
    countries
</h1>


    <label>
        <select multiple  bind:value={countries_chosen}>
            {#each countries as country}
            <option value={country}>
                {country}
            </option>
            {/each}
    </label>


<h1>
    cities
</h1>

    <label>
        <select multiple bind:value={cities_chosen}>
            {#each cities as city}
            <option value={city}>
                        {city}
            </option>
            {/each}
    </label>

回复:https://svelte.dev/repl/61c93b05a2374d1197fb3a38e86b75a1?version=3.46.4

谢谢!

您可以根据 countries_chosen 反应性地填充城市数组,方法是简单地将每个选定的国家映射到它们各自的城市,然后展平该数组。

    $: cities = countries_chosen.map(c => all_cities[c]).flat()

这是工作代码:

<script>
    $: countries_chosen = []
    $: cities_chosen = []
    let countries = ["france", "spain", "germany"]
    let cities = []
    let all_cities = {
        "france": ["paris", "bordeau"],
        "spain": ["barcelona", "madrid"],
        "germany": ["berlin", "frankfurt"]
    }
    $: console.log(countries_chosen)
    $: console.log(cities_chosen)
</script>

 <h1>
    countries
</h1>


    <label>
        <select multiple  bind:value={countries_chosen}>
            {#each countries as country}
            <option value={country}>
                {country}
            </option>
            {/each}
    </label>


<h1>
    cities
</h1>

    <label>
        <select multiple bind:value={cities_chosen}>
            {#each countries_chosen as country}
                {#each all_cities[country] as city}
                                <option value={city}>
                                    {city}
                            </option>
              {/each}

            {/each}
    </label>