【问题标题】:create new object value based on another object id根据另一个对象 ID 创建新的对象值
【发布时间】:2021-11-04 12:21:51
【问题描述】:

我需要根据 obj2 中的 id 值更新(或创建新数组)obj1 中的 id 值。做这个的最好方式是什么?我尝试过使用 map 和 reduce,但没有成功。任何帮助将不胜感激。

const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]

const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } }

outputExpected: [ { id: 'AAA', name: 'foo' }, { id: 'BBB', name: 'bar' } ]

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    根据数组的大小,构建可用于映射 obj1 的 Map 索引 obj2 id (Map(2) { 1 => 'AAA', 2 => 'BBB', ... }) 可能更有效。

    const obj1 = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' },];
    const obj2 = { A: { id: 1, externalId: 'AAA' }, B: { id: 2, externalId: 'BBB' } };
    
    const map = new Map(Object.values(obj2).map((o) => [o.id, o.externalId]));
    
    const result = obj1.map(({ id, ...o }) => ({ id: map.get(id), ...o }));
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      我建议使用Array.map(),在obj1中的每个对象中搜索obj2的匹配id,我们会使用Array.find()得到obj2中的对应值。

      const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]
      const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } }
      
      
      const result = obj1.map((obj) => { 
          const match = Object.values(obj2).find(el => el.id === obj.id);
          return { id: match.externalId, name: obj.name };
      });
      
      console.log('Result:', result)
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        【解决方案3】:

        Array.map 有效。将obj2 的值作为数组读取以映射到预期结果。我想对象键AB 可以忽略。

        const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ];
        const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } };
        
        const result = Object.values(obj2).map(({id, externalId}) => ({
            id: externalId, name: obj1.find(item => item.id === id)?.name
        }));
        
        console.log(JSON.stringify(result));

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-22
          • 2018-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多