You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript将指定XML结构数据转换为目标对象数组

问题

需要将如下格式的responseData数组转换为指定结构的对象数组,其中日期需从'29 Nov 2022'格式转换为'22/11/22'格式。

原始数据:

let responseData = [
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '123',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: 'vento',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'Vw',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '1',
          },
        ],
      },
    ],
  },
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '10012',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: '4matic',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'BMW',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '2',
          },
        ],
      },
    ],
  },
]

目标结构示例:

let obj = [
{
id: '1',
vin: '1',
brand: 'Vw',
model: 'vento',
date: '22/11/22',
price: '123',
},
{
id: '2',
vin: '2',
brand: 'BMW',
model: '4matic',
date: '22/11/22',
price: '10012',
},
{
id: '3',
vin: '3',
brand: 'TATA',
model: 'Nano',
date: '22/11/22',
price: '$10000',
},
];
解决方案

实现思路

  1. 遍历responseData中的每个车辆信息对象,提取内部elements数组中的字段值;
  2. 针对日期字段,编写转换函数将'DD MMM YYYY'格式转为'YY/MM/DD'格式;
  3. 为每个转换后的对象添加id字段,值与vin保持一致。

代码实现

// 日期转换函数:将'29 Nov 2022'转为'22/11/22'
function formatDate(dateStr) {
  const monthMap = {
    Jan: '01', Feb: '02', Mar: '03', Apr: '04',
    May: '05', Jun: '06', Jul: '07', Aug: '08',
    Sep: '09', Oct: '10', Nov: '11', Dec: '12'
  };
  const [day, month, year] = dateStr.split(' ');
  // 截取年份后两位,拼接成目标格式
  return `${year.slice(-2)}/${monthMap[month]}/${day}`;
}

// 转换数据
const transformedData = responseData.map(item => {
  // 从elements中提取各字段值
  const getFieldValue = fieldName => {
    const field = item.elements.find(el => el.name === `ns2:${fieldName}`);
    return field?.elements[0]?.text || '';
  };

  return {
    id: getFieldValue('vin'),
    vin: getFieldValue('vin'),
    brand: getFieldValue('brand'),
    model: getFieldValue('model'),
    date: formatDate(getFieldValue('date')),
    price: getFieldValue('price')
  };
});

console.log(transformedData);

代码说明

  • formatDate函数:通过月份映射表将英文月份缩写转为两位数字,再截取年份后两位,拼接成目标日期格式;
  • getFieldValue函数:封装了从elements数组中查找指定字段并提取文本值的逻辑,简化代码;
  • map方法:遍历原始数组,逐个转换为目标结构的对象,最终得到转换后的数组。

内容的提问来源于stack exchange,提问作者Akshaykumar Mande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:55:19