【问题标题】:Dynamicaly populate object动态填充对象
【发布时间】:2020-07-16 12:11:27
【问题描述】:

我正在编写一个 util 方法,它可以更改具有已知字段的对象中的日期格式。当我尝试动态生成字段时,它会抛出 undefined


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;
};

【问题讨论】:

  • container是一个空对象,里面没有设置数据
  • 更新了代码,我说的是console.log(arrayToProcess.field);这行
  • 我试图帮助你,我认为我是对的,但我看到你被否决了,所以......祝你好运:) 尝试改进对问题的描述,这不清楚你是什么'重新要求。

标签: javascript node.js ecmascript-6 momentjs


【解决方案1】:

我仍然不知道我是否 100% 理解了您的问题,但我认为您想根据输入对象动态创建字段。

在这种情况下,解决方案很简单,您需要使用[] 表示法而不是. 表示法来访问新字段:

arrayToProcess.field --> arrayToProcess[field]

因为在第一种情况下,您将尝试访问对象上的字段field

{
  field: 123
}

在第二种表示法中,您将访问名为field 变量值的属性。

【讨论】:

    【解决方案2】:

    这是因为您尝试访问 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;
    };
    

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      相关资源
      最近更新 更多