通过匹配其键来替换嵌套对象的属性

时间:2020-01-22 09:46:31

标签: javascript ecmascript-6 ecmascript-5

我有以下类型的对象

let obj = {
    "p1" : "main",
    "p2" : {
        "p21" : [
            {
                "key1" : "val1",
                "value1" : "val2",
            },
            {
                "prop"  : "test",
                "value" : "dummy"
            }
        ]
    }
}

需要找到“ prop”,如果存在,则将“ value”设置为空字符串。请注意,“ p21”内可能有任何数字对象,且顺序不限。只需找到“ prop”,然后将“ value”更新为空字符串

尝试了以下

obj.p2.p21.map((item) => {
    if (item.hasOwnProperty("prop")) {
      item.value = "";
    }
})

2 个答案:

答案 0 :(得分:2)

您需要创建一个函数来检查键,然后替换值。

let obj = {
  "p1": "main",
  "p2": {
    "p21": [{
        "key1": "val1",
        "value1": "val2",
      },
      {
        "prop": "test",
        "value": "dummy"
      }
    ]
  }
}

function replaceValue(item) {
  for (var i in item) {
    if (i == "prop") {
      item["value"] = "";
      break;//break if you only want to place the first , otherwise remove it
    }
  }
}

obj.p2.p21.map(item => replaceValue(item));

console.log(obj);
.as-console {
  height: 100% !important;
}

答案 1 :(得分:1)

obj.p2.p21.map((elem) => {
    if(Object.keys(elem)[0] === "prop") 
        elem.value = ""
})

尝试类似的东西吗?