forEach意外令牌向现有阵列添加新属性

时间:2017-05-24 06:28:20

标签: javascript lodash

我想使用date_from和date_to添加一个新的proeprrty调用total_days计算但是我的forEach得到了一个预期的令牌错误。

let applicants = [{
    date_from: '2017-05-05',
    date_to: '2017-05-10'
},{
    date_from: '2017-05-08',
    date_to: '2017-05-12'
}]

calculateDays = applicants.forEach(obj => 
    applicants['total_days'] = (obj.date_from).diff(obj.date_to, 'days')+1;
)

不知道这里有什么问题。

2 个答案:

答案 0 :(得分:1)

您没有完全澄清您想要的内容,但我试图通过您的代码进行猜测。

我的猜测是你想要从旧的数组申请人中创建一个新的申请人数组,但是在新数组中,你想要为该数组中的每个对象添加一个属性,即两个日期的天数差异

为此,您可以使用Array.prototype.map将数组中的每个项目映射到新数组。

我也在使用Object.assign to clone each object,以便原始数组不会被修改。

我也在将日期字符串解析为数字。解析的数字是自1970年1月1日00:00:00 UTC以来经过的毫秒数。如果我取两个数字的差值并除以millisecondsInADay,那么我将得到它们之间经过了多少天。

然后将结果存储到新数组calculateDays

如果您需要更多说明,请与我们联系。

let applicants = [{
  date_from: '2017-05-05',
  date_to: '2017-05-10'
}, {
  date_from: '2017-05-08',
  date_to: '2017-05-12'
}]

const millisecondsInADay = 1000 * 60 * 60 * 24;

const calculateDays = applicants.map(obj => Object.assign({}, obj, {
  total_days: ((
    Date.parse(obj.date_to) - Date.parse(obj.date_from)
   ) / millisecondsInADay) + ' days'
}));

console.log(calculateDays);

答案 1 :(得分:0)

假设您要向所有对象添加新属性,可以将obj用作新属性的变量。

applicants.forEach(obj => obj.total_days = obj.date_from.diff(obj.date_to, 'days') + 1);
//                        ^^^