RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1202573
Accepted
AlexKnow
AlexKnow
Asked:2021-11-10 16:46:44 +0000 UTC2021-11-10 16:46:44 +0000 UTC 2021-11-10 16:46:44 +0000 UTC

按键组合嵌套对象。JS

  • 772

有一个对象

Объект 1
{
 1: {
        id:1, // id: совпадает с ключом данного объекта, уникальное значение для всех объектов
        name: 'test1', // name: слово на латинице и всегда уникально,
        value: 1, // значение которое и нужно синхронизировать
        ...//другие поля
   },
 2: {
        id:2, // id в данном объекте совпадает с ключом данного объекта
        name: 'test2',
        value: 1,
        ...//другие поля
   }
3: {
        id:3, // id в данном объекте совпадает с ключом данного объекта
        name: 'test3',
        value: 1,
        ...//другие поля
   }
 ...// объект может содержать до 200 вложенных объектов
}

在程序执行过程中,出现更多这样的对象,这些对象在结构上与给定对象相似,其中可能包含name前一个对象中已经遇到的字段。例如:

Объект 2
{
     50: {
            id:50, 
            name: 'what', 
            value: 2,
            ...//другие поля
       },
     51: {
            id:51, 
            name: 'test1', // данное имя встречалось в "объекте 1"
            value: 2,
            ...//другие поля
       }
     ...//объект может содержать до 200 вложенных объектов
 }

Объект 3
 {
      67: {
              id:67, 
              name: 'test2', 
              value: 3,
              ...//другие поля
           },
      68: {
              id:68, 
              name: 'test4',
              value: 3,
              ...//другие поля
           }
         ...//объект может содержать до 200 вложенных объектов
 }

结果:

{
     51: {
            id:51, 
            name: 'test1', // данное значение было в "Объекте 1" и "Объекте 2" т.к. "Объекте 2" был взят в цикле позже чем "Объекте 1", то в результирующий взят объект из "Объект 2"
            value: 2, 
            ...//другие поля
        },
    67: {
            id:67, 
            name: 'test2', // из объекта 3
            value: 3,
            ...//другие поля
       },
    3: {
            id:3, 
            name: 'test3', // из объекта 1
            value: 1,
            ...//другие поля
       },
   50: {
            id:50, 
            name: 'what',  // из объекта 2
            value: 2,
            ...//другие поля
       },
   68: {
            id:68, 
            name: 'test4', // из объекта 3
            value: 3,
            ...//другие поля
       }
     ... // объект может содержать до 200 вложенных объектов
    }

那些。您只需要在该字段中результирующий объект放置唯一的对象name。最后一个值取自循环中遇到的对象последним。对象的排序顺序并不重要。

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Anton Shchyrov
    2021-11-10T17:16:12Z2021-11-10T17:16:12Z

    这个想法很简单:首先将对象添加到字典中,其中字段将是 key name,然后将字典转换为结果对象

    const obj1 = {
      1: {
        id: 1, // id: совпадает с ключом данного объекта, уникальное значение для всех объектов
        name: 'test1', // name: слово на латинице и всегда уникально,
        value: 1, // значение которое и нужно синхронизировать
      },
      2: {
        id: 2, // id в данном объекте совпадает с ключом данного объекта
        name: 'test2',
        value: 1
      },
      3: {
        id: 3, // id в данном объекте совпадает с ключом данного объекта
        name: 'test3',
        value: 1
      }
    };
    
    const obj2 = {
      50: {
        id: 50,
        name: 'what',
        value: 2
      },
      51: {
        id: 51,
        name: 'test1', // данное имя встречалось в "объекте 1"
        value: 2
      }
    };
    
    const obj3 = {
      67: {
        id: 67,
        name: 'test2',
        value: 3
      },
      68: {
        id: 68,
        name: 'test4',
        value: 3
      }
    };
    
    const accum = {};
    
    function addObj(accum, obj) {
      for (let i in obj) {
        accum[obj[i].name] = {
          obj: obj[i],
          idx: i
        }
      }
    }
    
    function convertAccum(accum) {
      const res = {};
      for (let i in accum) {
        const obj = accum[i];
        res[obj.idx] = obj.obj;
      }
      return res;
    }
    
    addObj(accum, obj1);
    addObj(accum, obj2);
    addObj(accum, obj3);
    const res = convertAccum(accum);
    console.log(res);

    PS 如果源对象中的索引是唯一的,则此代码将起作用

    • 1
  2. DiD
    2021-11-10T17:39:37Z2021-11-10T17:39:37Z

    你听说过Object.assign()、Object.entries()、Object.fromEntries()吗?

    // Входящие данные
    let objA = { [1]: {name: '1' }, [2]: {name: '2'}, [3]: {name: '3'}, [4]: {name: '4'}};
    let objB = { [5]: {name: '4' }, [6]: {name: '5'}, [7]: {name: '6'}, [8]: {name: '7'}};
    let objC = { [9]: {name: 'a' }, [10]: {name: 'b'}, [11]: {name: 'c'}, [12]: {name: 'd'}};
    
    // Зададим несколько констанций
    const { entries: E, fromEntries: F, assign: A } = Object,
      [R,I,P] = [ a => [{},...a],
                  ([name,data]) => [data.id,data],
                  ([id,data]) => [data.name,A(data,{id})] ],
      N = o => F(E(o).map(P));
    
    // Это всё, что вам нужно
    let objR = F(E(A(...R([objA,objB,objC].map(N)))).map(I));
    
    
    // На выходе получаем objR
    
    // JSON.stringify и прочие .replace() здесь для форматирования вывода
    // то есть, этот код в условие задачи не входит
    console.log('obj = ',JSON.stringify(objR).replace(/(^{|},)/g,'$1\n').replace(/^"(\w+)":/mg,'[$1]:'));

    • 1

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5