【问题标题】:Split objects in array, based on the property根据属性拆分数组中的对象
【发布时间】:2022-01-18 19:04:10
【问题描述】:

我想根据对象内部的属性复制数组中的整个对象。我需要根据拆分的电子邮件在提名中复制对象。

例如

array = [
{
  id:1,
  name: ravi,
  nominations: xyz@gmail.com, abc@gmail.com
},
{
   id:2
   name: ramu,
   nominations: 123@gmail.com, 456@gmail.com
}
]

需要像这样的输出

Output_array = [
{
  id:1,
  name: ravi,
  nominations: xyz@gmail.com
},
{
  id:1,
  name: ravi,
  nominations: abc@gmail.com
},
{
   id:2
   name: ramu,
   nominations: 123@gmail.com
},
{
   id:2
   name: ramu,
   nominations: 456@gmail.com
}
]

【问题讨论】:

    标签: javascript jquery angular typescript


    【解决方案1】:

    最简单的方法是在项目上flatMap,然后在提名上map

    const data = [{
      id:1,
      name: "ravi",
      nominations: "xyz@gmail.com, abc@gmail.com"
    },
    {
       id:2,
       name: "ramu",
       nominations: "123@gmail.com, 456@gmail.com"
    }];
    
    const result = data.flatMap(item => {
      return item.nominations.split(", ").map(email => ({
        id: item.id,
        name: item.name,
        nomination: email
      }))
    })
    
    console.log(result)

    【讨论】:

    • @RoryMcCrossan 谢谢,更新了代码。
    【解决方案2】:

    使用循环的一种非常简单的方法:

    let data = [
      {
        "id": 1,
        "name": "ravi",
        "nominations": "xyz@gmail.com,abc@gmail.com"
      },
      {
        "id": 2,
        "name": "ramu",
        "nominations": "123@gmail.com,456@gmail.com"
      }
    ];
    
    let newData = []
    for (let element of data) {
      let emailIds = element.nominations.split(",");
      if (emailIds.length > 1) {
        for (let emailId of emailIds)
          newData.push({ id: element.id, name: element.name, nominations: emailId })
      }
    }
    
    console.log(newData)

    说明:从遍历整个对象开始,在每个对象中拆分nominations 字符串并用“,”拆分,以检查是否有多个电子邮件。如果确实存在,则运行一个循环来单独添加它们。

    【讨论】:

      【解决方案3】:

      这可以用一条很长的单线来完成。 Object.assign 函数可用于在更改感兴趣的属性时复制输入对象。

      let input = [{
          id: 1,
          name: `ravi`,
          nominations: `xyz@gmail.com, abc@gmail.com`
      },
      {
          id: 2,
          name: `ramu`,
          nominations: `123@gmail.com, 456@gmail.com`
      }];
      
      let output = input.flatMap(i => i.nominations.split(",").map(n => Object.assign({}, i, { nominations: n.trim() })));
      
      console.log(output);

      【讨论】:

        【解决方案4】:

        你可以试试这个代码:

        <!DOCTYPE html>
        <html>
        <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
        <script>
        $(document).ready(function(){
            var data_array = [
                              {
                                id:'1',
                                name: 'ravi',
                                nominations: 'xyz@gmail.com, abc@gmail.com',
                              },
                              {
                                 id:'2',
                                 name: 'ramu',
                                 nominations: '123@gmail.com, 456@gmail.com',
                              },
                            ];
            
            
            var output_array = data_array.flatMap(key => {
              return key.nominations.split(",").map(split_email => ({
                id: key.id,
                name: key.name,
                nomination: $.trim(split_email)
              }))
            });
            
            console.log(output_array);
        
        });
        </script>
        </head>
        <body>
        </body>
        </html>

        【讨论】:

          猜你喜欢
          • 2021-05-20
          • 2015-03-14
          • 2019-05-05
          • 2022-10-30
          • 1970-01-01
          • 2019-04-15
          • 2018-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多