【问题标题】:Modify an array of objects with for in使用 for in 修改对象数组
【发布时间】:2022-07-07 22:19:35
【问题描述】:

我正在尝试格式化对象内的日期。

我目前有下一组对象:

    [
      { date: 2022-01-03T05:00:41.560Z },
      { date: 2022-01-03T22:54:33.980Z },
      { date: 2022-01-03T22:50:26.920Z },
      { date: 2022-01-03T22:32:29.660Z },
      { date: 2022-01-03T22:22:58.480Z }
    ]

我正在尝试下一步:

    for (const prop in obj) {
        obj[prop].date = moment(obj[prop].date).tz("America/Vancouver").format("YYYY-MM-DD");
    }

期待:

    [
      { date: 2022-01-02 },
      { date: 2022-01-03 },
      { date: 2022-01-03 },
      { date: 2022-01-03 },
      { date: 2022-01-03 }
    ]

但我做不到

let obj = [
{ date: "2022-01-03T05:00:41.560Z" },
{ date: "2022-01-03T22:54:33.980Z" },
{ date: "2022-01-03T22:50:26.920Z" },
{ date: "2022-01-03T22:32:29.660Z" },
{ date: "2022-01-03T22:22:58.480Z" }
];
for (const prop in obj) {
  obj[prop].date = moment(obj[prop].date).tz("America/Vancouver").format("YYYY-MM-DD");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js" ></script>

修改一下,我一直得到原来的数组

【问题讨论】:

  • 您的数据是一个对象数组,因此您可能需要for...of 代替:for (const obj of data) {...}

标签: javascript


【解决方案1】:

我建议使用 Array.map 进行此转换:

const data = [
  { date: '2022-01-03T05:00:41.560Z' },
  { date: '2022-01-03T22:54:33.980Z' },
  { date: '2022-01-03T22:50:26.920Z' },
  { date: '2022-01-03T22:32:29.660Z' },
  { date: '2022-01-03T22:22:58.480Z' }
];

const res = data.map(
  ({ date }) => ({
    date: moment(date).tz("America/Vancouver").format("YYYY-MM-DD")
  })
);

console.log(res);

在这个例子中,我们解构每个对象,只提取date,并返回一个新对象,其中只有date

考虑到下面的cmets,试试Array.forEach:

data.forEach(
  ({ date }, index) => {
    data[index].date = moment(date).tz("America/Vancouver").format("YYYY-MM-DD");
  }
);

【讨论】:

  • 这不会修改 OP 似乎想要的 data
【解决方案2】:
const objects = [
{ date: 2022-01-03T05:00:41.560Z },
{ date: 2022-01-03T22:54:33.980Z },
{ date: 2022-01-03T22:50:26.920Z },
{ date: 2022-01-03T22:32:29.660Z },
{ date: 2022-01-03T22:22:58.480Z }
];

for (const objin objects ) {
  obj.date = moment(obj.date).tz("America/Vancouver").format("YYYY-MM-DD");
}
console.log(objects)

【讨论】:

    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多