我正在编写一个util方法,它在一个具有已知字段的对象中更改日期格式。 当我试图动态生成字段时,它抛出未定义。
const dateFields = [
'booking_timestamp',
'box_timestamp',
'createdAt',
'updatedAt'
];
exports.convertToLondon = (arrayToProcess) => {
console.log(arrayToProcess.booking_timestamp); // 20170421 04:30:00
const processedArray = dateFields.map(field => {
console.log(arrayToProcess.field); // undefined
// const container = {};
const utcCutoff = moment.utc(arrayToProcess.field, 'YYYYMMDD HH:mm:ss');
// arrayToProcess.field => i would like to variable to dynamically populate for arrayToProcess.booking_timestamp
const displayCutoff = utcCutoff.clone().tz('Europe/London');
console.log('utcCutoff:', utcCutoff.format('YYYYMMDD HH:mm:ssa Z')); // => utcCutoff: 20170421 04:30:00pm +00:00
console.log('displayCutoff:', displayCutoff.format('YYYYMMDD HH:mm:ss:sssZ')); // => displayCutoff: 20170421 12:30:00pm -04:00
return null;
});
return processedArray;
};
我仍然不知道我是否100%地理解了您的问题,但我认为您希望基于输入对象动态地创建字段。
在这种情况下,解决方案很简单,您需要使用[]
表示法而不是表示法访问新字段:
ArrayToProcess.Field
-->; ArrayToProcess[field]
因为在第一种情况下,您将尝试访问对象上的字段field
:
{
field: 123
}
而在第二种表示法中,您将访问名为field
变量值的属性。
这是因为您试图访问ArrayToProcess.Field
,而不是仅访问Field
(数组的一个元素)。 您位于.map
回调中,其中有field
实例。 ArrayToProcess.Field不存在。
您还必须访问函数参数中的数组(arrayToProcess),而不是上面定义的变量(dateFields),因为它不存在于函数的上下文中。
const dateFields = [
'booking_timestamp',
'box_timestamp',
'createdAt',
'updatedAt'
];
exports.convertToLondon = (arrayToProcess) => {
console.log(arrayToProcess.booking_timestamp); // 20170421 04:30:00
const processedArray = arrayToProcess.map(field => { // use arrayToProcess and not dateFields
console.log(field); // use just field
// const container = {};
const utcCutoff = moment.utc(arrayToProcess.field, 'YYYYMMDD HH:mm:ss');
// arrayToProcess.field => i would like to variable to dynamically populate for arrayToProcess.booking_timestamp
const displayCutoff = utcCutoff.clone().tz('Europe/London');
console.log('utcCutoff:', utcCutoff.format('YYYYMMDD HH:mm:ssa Z')); // => utcCutoff: 20170421 04:30:00pm +00:00
console.log('displayCutoff:', displayCutoff.format('YYYYMMDD HH:mm:ss:sssZ')); // => displayCutoff: 20170421 12:30:00pm -04:00
return null;
});
return processedArray;
};