javascript 如何访问和更新对象的值?

m1m5dgzv  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(122)

我需要一个关于如何访问和更新以下对象的值的帮助。首先,我比较了不同对象是否包含相同的键值对。如果它们不相同,那么我想更新其中一个对象的值。例如,

const selectedObj = {
    "building": ["3"],
    "unit": [ "2"],
    "filterOrder": 
      [
        {"building": "3" },
        { "unit": "2" }
      ]
}

const defaultObj = {
    "building": [ "0", "1", "2" ],
    "unit": ["1", "2", "13", "17"]
}

const arr1 = selectedObj.building;
const arr2 = defaultObj;
const hasAllElems = arr1.every(elem => arr2.includes(elem));
console.log(hasAllElems); // false

我尝试执行以下操作,并能够更新selectedObj.building属性,但无法正确访问值filterOrder

new_obj = {
  ...selectedObj,
  unit: ["3"]
  filterOrder: [{"unit": "3"}]
}

这是我尝试访问和更新filterOrder属性时得到的结果。

[
   {
       "building": "3",
       "unit": "3"
    }
]

代替

[
    {
        "building": "1"
    },
    {
        "unit": "3"
    }
]

如果键值对的顺序被切换了,我可以简单地使用下面的代码,并且它每次都能工作。不幸的是,它不是那么动态的。这个方法意味着unit必须在我的对象的第一个属性中。

selectedObj.filterOrder[0]["unit"] = "";
iklwldmw

iklwldmw1#

假设您有两个名为defaultObj和selectedObj的对象,并且要比较它们的建筑属性并在必要时更新它们,则可以执行以下操作:

// Check if the 'building' property of the two objects is different
if ($defaultObj->building != $selectedObj->building && $selectedObj->filterSortingOrder[0]->building != $defaultObj->building) {
    // Update the 'building' property of both objects to empty strings
    $defaultObj->building = '';
    $selectedObj->building = '';
    $selectedObj->filterSortingOrder[0]->building = '';
}

此代码比较两个对象的building属性,如果它们不同,则检查selectedObj的filterSortingOrder数组中第一个元素的building属性是否也与defaultObj的building属性不同。如果它们都不同,则将所有三个对象的building属性更新为空字符串。
希望这对你有帮助。

相关问题