首页  >  问答  >  正文

使用展开运算符从map函数返回键值对的方法

<p>我有一个对象和一个数组。假设:</p> <pre class="brush:php;toolbar:false;">const first = { 'key1': 'some date', 'key2': 'some date' } const second = ['key3', 'key4']</pre> <p>然后使用扩展语法将它们合并为单个对象。对于数组中的每个项,我想创建一个新的键值对,并将其放入这个合并的对象中。目前,我只能从map函数中返回对象,而不是键值对。如何更改这个?</p> <pre class="brush:php;toolbar:false;">const combined = { ...first, ...second.map(key => ({ [key]: new Date() })) // 返回键值对而不是对象 }</pre> <p>我得到的结果:</p> <pre class="brush:php;toolbar:false;">{ '0': { key3: 'some date' }, '1': { key4: 'some date' }, key1: 'some date', key2: 'some date' }</pre> <p>我想要的结果:</p> <pre class="brush:php;toolbar:false;">{ key1: 'some date', key2: 'some date', key3: 'some date', key4: 'some date' }</pre> <p><br /></p>
P粉253800312P粉253800312434 天前456

全部回复(1)我来回复

  • P粉925239921

    P粉9252399212023-08-14 14:46:08

    无法这样做。 map 输出一个数组(其中每个值是通过将原始数组中匹配索引处的值传递给函数的结果)。如果将数组展开到对象中,您将得到索引(数字)作为属性名称和值作为值。

    如果您想从数组开始并以对象结束,那么map就是错误的工具。请改用reduce

    类似以下代码:

    const combined = second.reduce(
        (prev, curr) => {
            return {
                ...prev,
                [curr]: new Date()
            };
        },
        first
    );
    

    回复
    0
  • 取消回复