为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2021-11-04 16:26:20
我有一组 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是nullmax_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] 这是非常错误的......
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

您的代码的问题是您正在返回一个只有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);


查看完整回答
反对 回复 2021-11-04
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信