Javascript - 基于另一个现有的键/值为数组中的每个 javascript

我有一组 javascript 对象(长度不定)。


var records =

  { query_result_id: 373,

    url: 'https://www.example1.com/hheyue',

    title: 'title1',

    uselesskey3: 'yo', 

    uselesskey4: 'ya',     

    max_email_nb_sent: 1 },

 { query_result_id: 375,

  url: 'https://www.example2.com',

  title: 'title2',

  uselesskey3: 'yo', 

  uselesskey4: 'ya',     

  max_email_nb_sent: null } 

 //and so on...]

我今天通过做一些事情来基于记录创建一个名为parametersObj的新对象(为了不变性原因保持记录不变):


var parametersObj = records

      //remove useless keys      

      .map(({

        title,uselesskey3, uselesskey4, max_email_nb_sent,

        ...item

      }) => item)

      //add new needed keys

      .map(s => (

        {

          ...s,

          status: process.env.CONTEXT === "production" ? "prod" : "dev",

          triggered_at: new Date().toLocaleString()

        }

      ));

这完美地工作。


但是我现在要做的是在创建parametersObj一个方法时添加上面的代码,在删除无用的键(.map上面的第一个)之前,我添加一个email_nb为每个 javascript 对象调用的新键,该键等于:


0如果max_email_nb_sent是null

max_email_nb_sent + 1如果max_email_nb_sent是not null

我们执行脚本后parametersObj的期望值应该是:


  { query_result_id: 373,

    url: 'https://www.example1.com/hheyue',

    title: 'title1',

    email_nb: 2,

    status: "prod",

    triggered_at: '2019-9-30 23:11:12'   

  },

 { query_result_id: 375,

  url: 'https://www.example2.com',

  title: 'title2',

  email_nb: 0,

  status: "prod",

  triggered_at: '2019-9-30 23:11:12' } 

 //and so on...]

我可以使用 ES6,如果可能的话,我更喜欢使用更简洁的方式。


我试过这个,但下面这个不起作用


var parametersObj = records

          //adding the new key email_nb          

         .map(s=> s["email_nb"] = s["max_email_nb_sent"] + 1)

         //remove useless keys      

          .map(({

            title,uselesskey3, uselesskey4, max_email_nb_sent,

            ...item

          }) => item)

          //add new needed keys

          .map(s => (

            {

              ...s,

              status: process.env.CONTEXT === "production" ? "prod" : "dev",

              triggered_at: new Date().toLocaleString()

            }

          ));

但随后 parametersObj 变得正好等于 [1, 1] 这是非常错误的......


德玛西亚99
浏览 125回答 1
1回答

炎炎设计

您的代码的问题是您正在返回一个只有email_nb属性的对象。您还必须返回其他现有属性。var parametersObj = records         .map(item => ({ ...item,        "email_nb": item.max_email_nb_sent ? item.max_email_nb_sent + 1 : 0      }))     .map(       //remove useless keys           )          .map(s => (       //add new needed keys     ));现场示例:var records = [{    query_result_id: 373,    url: 'https://www.example1.com/hheyue',    title: 'title1',    uselesskey3: 'yo',    uselesskey4: 'ya',    max_email_nb_sent: 1  },  {    query_result_id: 375,    url: 'https://www.example2.com',    title: 'title2',    uselesskey3: 'yo',    uselesskey4: 'ya',    max_email_nb_sent: null  }];var parametersObj = records  .map(item => ({ ...item,    "email_nb": item.max_email_nb_sent ? item.max_email_nb_sent + 1 : 0  }))console.log(parametersObj);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript