如何克隆JavaScript对象?

devon66h

formatHours()下面的函数中,我尝试分配newHoursselectedLocation.data.hours(一个对象)

我正在使用传播运算符来克隆对象,以便函数完成时selectedLocation.data.hours保持不变,但事实并非如此。该函数运行后,selectedLocationd.data.hours现在等于newHours

formatHours():

const formatHours = () => {
    // ERROR: trying to clone selectedLocation.data.hours, but not working
    const newHours = { ...selectedLocation.data.hours };

    // loop through all hours and convert them to javascript date with .toDate()
    for (const hour in newHours) {
      newHours[hour][0] = newHours[hour][0].toDate();
      newHours[hour][1] = newHours[hour][1].toDate();
    }

    // set hours state with updated hours
    setHours(newHours);
  };  

selectedLocation.data.hours看起来像是在传递之前formatHours()

(Firebase Firestore时间戳记数组的对象)

在此处输入图片说明

这是selectedLocation.data.hours经过它之后样子formatHours()

(JavaScript Date对象数组的对象)

在此处输入图片说明

注意: selectedLocation.data.hours该功能前后应保持不变,但不是。我肯定错过了什么。

一定的表现

无需更改newHours[hour]数组(该数组会使当前处于状态/属性的对象发生变化),而无需在该位置使用所需的属性创建一个全新的数组

// Shallow clone newHours
const newHours = { ...selectedLocation.data.hours };
// Reassign each property; it'll affect the clone, not the original
for (const [hour, arr] of Object.entries(newHours)) {
  newHours[hour] = [
    arr[0].toDate(),
    arr[1].toDate(),
    arr[2]
  ];
}

另一种方法是Object.fromEntries

const newHours = Object.fromEntries(
    Object.entries(selectedLocation.data.hours).map(([hour, arr]) => (
        [ // return an entry array
            hour, // key in new object
            [ // value in new object
                arr[0].toDate(),
                arr[1].toDate(),
                arr[2]
            ]
        ]
    ))
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何克隆对象的Javascript数组?

来自分类Javascript

如何正确克隆JavaScript对象?

来自分类Dev

如何克隆对象的JavaScript Webpack

来自分类Dev

如何在javascript中克隆文件对象?

来自分类Javascript

在JavaScript中克隆对象

来自分类Dev

用JavaScript克隆对象

来自分类Java

如何克隆JAXB对象

来自分类Javascript

如何克隆一个键以外的JavaScript对象?

来自分类Dev

如何在javascript中克隆猫鼬查询对象

来自分类Javascript

您如何在Javascript中克隆对象数组?

来自分类Dev

如何在JavaScript中深度克隆JSON对象

来自分类Dev

Javascript如何深度克隆内部有对象的多维数组?

来自分类Dev

在JavaScript中创建对象的克隆

来自分类Dev

基于属性javascript克隆对象

来自分类Dev

克隆包含功能的javascript对象

来自分类Dev

恢复JavaScript中的克隆对象

来自分类Dev

如何克隆TypeScript对象数组?

来自分类Dev

如何设置克隆对象的属性?

来自分类Dev

如何在 Javascript 中的对象克隆数组中修改对象值

来自分类Dev

Javascript Array 推送更新也克隆了对象

来自分类Dev

克隆JavaScript对象-包括getter和setter

来自分类Dev

克隆或复制对象中的方法(JavaScript)

来自分类Dev

高阶函数中的Javascript对象克隆

来自分类Dev

如何在Javascript中使用数组成员深度复制(克隆)对象?

来自分类Dev

Javascript - 如何破坏一个对象并克隆一个属性?

来自分类Dev

如何在 JavaScript 中克隆对象数组但将新数组的值设置为 null

来自分类Dev

如何取消克隆的PHP对象的ID

来自分类Dev

如何在Kotlin中克隆对象?

来自分类Java

如何克隆在Java领域的最终抽象对象?