[英]JS: Check for existence of deep object key and replace value
我想开发一个函数来检查深层对象中是否存在键,然后用另一个对象的数据集替换该键的值。
例如
var obj = {
"id": 1,
"component": "Preset 1",
"priority": 1,
"header": {
"modeSet": 2
}
}
const modeSets = [
{
"id": 1
"name": "Mode Set 1"
},
{
"id": 2
"name": "Mode Set 2"
}
]
function obtainModeSets(obj){
//...
}
当函数obtainModeSets
运行时,我想改变obj
以便obj
中modeSet
的值等于{ "id": 2 "name": "Mode Set 2" }
有没有人有什么建议? 谢谢
你可以像这样使用递归
const obj = { "id": 1, "component": "Preset 1", "priority": 1, "header": { "modeSet": 2 } } const modeSets = [{ "id": 1, "name": "Mode Set 1" }, { "id": 2, "name": "Mode Set 2" } ] function obtainModeSets(obj) { Object.entries(obj).forEach(([key, value]) => { if (key === "modeSet") { obj[key] = modeSets.find(set => set.id === value) return } if (typeof value === "object") { obtainModeSets(value) } }) } obtainModeSets(obj) console.log(obj)
我认为类似下面的代码可能会解决您的问题。 我不知道你到底是什么意思。 但是根据显示的例子,我猜你需要用modeSets
中提供的 id 替换你的密钥。
function obtainModeSets(obj, key, cb){
// loop through all possible keys
Object.keys(obj).forEach(k => {
if (key === k) {
obj[k] = cb(obj[k])
}
// if the value of the key is object, just go inside
if (typeof obj[k] === "object") {
obtainModeSets(obj[k], key, cb)
}
})
}
// you can call your function like this
obtainModeSets(obj, 'modeSet', (val) => {
return modeSets.find(mode => mode.id === val)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.