【问题标题】:Javascript Objects, For loop mutlidimensional array to create new objectJavascript对象,For循环多维数组以创建新对象
【发布时间】:2020-02-05 21:17:41
【问题描述】:

我有下面的数组,想创建一个新的对象,需要 ID + 参加者(姓名/照片)

所以输出应该是新的object = [{id:1, name: 'tom'}, {id:2, name: 'john'}]

需要vanilla JS 首选es6

const eventData = [{
    id: "1",
    title: 'event1'
    attendees: [{
      name: "Tom",
      photoURL: "https://randomuser.me/api/portraits/men/22.jpg"
    }]
  },
  {
    id: "2",
    title: 'event2'
    attendees: [{
      name: "John",
      photoURL: "https://randomuser.me/api/portraits/men/22.jpg"
    }]
  }
];

并且想创建一个格式如下的新对象

const attendees = [{
    id: "1",
    name: "Tom",
    photoURL: "https://randomuser.me/api/portraits/men/22.jpg"

  },
  {
    id: "2",
    name: "Tom",
    photoURL: "https://randomuser.me/api/portraits/men/22.jpg"
  }
];

谢谢。

【问题讨论】:

  • "Need vanilla JS prefer es6" 您至少自己尝试过,还是只是要求我们为您编写代码?如果您尝试过,请与我们分享代码,然后我们可以指导解决方案
  • 这看起来像是数组“map”函数的一个很好的用例。即eventData.map(),特别是如果attendees 数组始终是单个条目...
  • 类似eventData.reduceRight((acc, v) => v.attendees.map(at => ({ ...at, id: v.id })).concat(acc), [])?

标签: javascript arrays


【解决方案1】:

我想这就是你的答案

function alex() {
  let objects = [
    { id: 1, name: "tom" },
    { id: 2, name: "john" }
  ];

  const eventData = [
    {
      id: "1",
      title: "event1",
      attendees: [
        {
          name: "Tom",
          photoURL: "https://randomuser.me/api/portraits/men/22.jpg"
        }
      ]
    },
    {
      id: "2",
      title: "event2",
      attendees: [
        {
          name: "John",
          photoURL: "https://randomuser.me/api/portraits/men/22.jpg"
        }
      ]
    }
  ];

  eventData.map(eventDataObject => {
    let findById = objects.findIndex(
      x => Number(x.id) === Number(eventDataObject.id)
    );
  let findByName = objects.findIndex(
      x => x.name === eventDataObject.attendees[0].name)
   
    let objectsCopy = [...objects];
    objectsCopy[findById].image = eventDataObject.attendees[0].photoURL;
    objects = objectsCopy;
  });

  console.log("objects:",objects);
}
alex();

【讨论】:

    【解决方案2】:

    感谢大家尝试提供帮助,感谢大家给予负面反馈(我仍然是初学者 - 请耐心等待新手问题)

    这是我的解决方案(地图 + es6 对象破坏)

    const eventData = [
      {
        id: "1",
        attendees: 
          {
            name: "Bob",
            age: 30
          }
    
      },
      {
        id: "2",
        attendees: 
          {
            name: "kareem",
            age: 22
          },
    
      }
    ];
    
    
    
    
    const newList = eventData.map(entry => {
      const id = entry.id;
      const attendees = entry.attendees;
      let newObjs = {id,...attendees};
    })
    
    newList.map(entry => console.log(entry))
    

    输出:

    > Object { id: "1", name: "Bob", age: 30 }
    > Object { id: "2", name: "kareem", age: 22 }
    

    【讨论】:

    • 这不能回答所提出的问题。:在原始问题中,attendees 属性是 @987654324 @ 个对象。在这个答案中,源数据已被修改,attendees 属性现在是一个对象。源数据不再具有“多维”特征。
    • 提供的代码未显示您引用的输出。实际输出为undefined、undefined。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2017-08-09
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多