【问题标题】:Object property check and format date [closed]对象属性检查和格式化日期
【发布时间】:2022-01-06 11:27:31
【问题描述】:

检查标头对象类型检查是否类型 == 日期然后对于该属性只需要添加日期格式。 在 headers 对象中查找类型,如果 header 对象类型是日期,则返回最终结果将是格式日期

标题对象:

let headers = [
  {
    key_name: 'trans_id',
    header_value: 'Transaction ID' ,type:'number' 
  },
  {
    key_name: 'start_date',
    header_value: 'Start Date' ,type:'date' 
  }
]

结果对象:

let results = [
  {
    trans_id: '2019124453159',
    start_date:'2021-12-27T00:00:00.000Z',
    code: '$'
  },
  {
    trans_id: '2019120534555',
    start_date:'2021-12-27T00:00:00.000Z',
    code: 'INR'
  }
]

标题类型检查并格式化日期。 预期结果是:

let results = [
  {
    Transaction ID: '2019124453159',
    Start Date : '2021-12-27'
  },
  {
    Transaction ID: '2019120534555',
    Start Date : '2021-12-27'

  }
]

我尝试使用以下脚本返回没有格式化日期:

let headers = [{
    key_name: 'trans_id',
    header_value: 'Transaction ID',
    type: 'number'
  },
  {
    key_name: 'start_date',
    header_value: 'Start Date',
    type: 'date'
  }
]

let results = [{
    trans_id: '2019124453159',
    start_date: '2021-12-27T00:00:00.000Z',
    code: '$'
  },
  {
    trans_id: '2019120534555',
    start_date: '2021-12-27T00:00:00.000Z',
    code: 'INR'
  }
]

const mappedHeaders = results.map((r) => {
  const keys = Object.keys(r);
  let newObj = {};
  for (const key of keys) {
    const newHeader = headers.find((h) => h.key_name === key);
    if (newHeader) newObj[newHeader.header_value] = r[key];
  }
  return newObj;
});
console.log(mappedHeaders)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    我添加了一个 if - 这就是你需要的吗?

    let headers = [
      { key_name: 'trans_id',   header_value: 'Transaction ID', type: 'number' },
      { key_name: 'start_date', header_value: 'Start Date',     type: 'date' }
    ]
    
    let results = [{ trans_id: '2019124453159', start_date: '2021-12-27T00:00:00.000Z', code: '$' }, { trans_id: '2019120534555', start_date: '2021-12-27T00:00:00.000Z', code: 'INR' } ];
    
    const mappedHeaders = results.map((r) => {
      const keys = Object.keys(r);
      return  keys.reduce((acc,key) => { 
        const newHeader = headers.find((h) => h.key_name === key);
        if (newHeader) {
          let val = r[key]; 
          if (newHeader.type === 'number') val = parseInt(r[key]);
          else if (newHeader.type === 'date') val = val.split("T")[0];
          acc[newHeader.header_value] = val
        }  
        return acc;
      },{})
    });
    console.log(mappedHeaders)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

    【讨论】:

    • 我想检查标题类型 == 日期,然后该属性只需要添加日期格式。我只添加了两个属性,而运行时标头类型和结果数据会更多,因此需要根据标头类型检查进行更新
    • 我更新了我的问题
    • 我更新了答案
    【解决方案2】:

    您还没有处理标题的类型。检查表头的类型是否为日期,如果则使用moment 格式化并用作值,否则直接使用值。

    工作小提琴

    let headers = [
      {key_name: 'trans_id',header_value: 'Transaction ID',type: 'number'},
      {key_name: 'start_date',header_value: 'Start Date',type: 'date'}
    ]
    
    let results = [
      {trans_id: '2019124453159',start_date: '2021-12-27T00:00:00.000Z',code: '$'},
      {trans_id: '2019120534555',start_date: '2021-12-27T00:00:00.000Z',code: 'INR'}
    ]
    const dateFormat = "YYYY-MM-DD";
    
    const mappedHeaders = results.map((r) => {
      const keys = Object.keys(r);
      let newObj = {};
      for (const key of keys) {
        const newHeader = headers.find((h) => h.key_name === key);
        if (newHeader) newObj[newHeader.header_value] = newHeader.type === 'date' ? moment(new Date(r[key])).format(dateFormat) : r[key];
      }
      return newObj;
    });
    console.log(mappedHeaders)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多