在 JavaScript 中分配对象和嵌套对象的值
Assign value of object and nested object in JavaScript
所以,基本上,我有这个对象(在 vue data() 中):
...
detail: {
title: 'I have no idea',
date: 2020-02-12,
sender: {
name: 'John Cenna',
username: 'john10'
},
receipent: {
name: 'Katleen',
username: 'katmeow'
},
....
}
现在,我想将它们全部指定为空(用于验证过程,某种程度上)但无法指定嵌套对象(没有子对象的对象只需循环即可)。我该怎么做呢?谢谢
一个递归的解决方案:
- 使用
Object.entries()
迭代对象的键值条目如下。请注意 Object.entries()
return 是非对象的空数组。
- 如果条目的值已经是
null
或 undefined
,return。
- 如果条目的值是数组,则对每个数组项进行递归(转到步骤 1,将数组项作为要计算的新对象)。
- 如果条目的值是一个对象,则对该对象进行递归。
- 否则,将条目的值设置为
null
。
const data = {
detail: {
title: 'I have no idea',
date: 2020 - 02 - 12,
sender: {
name: 'John Cenna',
username: 'john10'
},
receipent: {
name: 'Katleen',
username: 'katmeow'
},
items: [
{ id: 100, name: 'Apple' },
{ id: 200, name: 'Banana' },
{ id: 300, name: 'Orange' },
]
}
}
function nullify(obj) {
// 1
Object.entries(obj).forEach(([k,v]) => {
// 2
if (v === null || v === undefined) {
return
}
// 3
if (Array.isArray(v)) {
return v.forEach(nullify)
}
// 4
if (typeof v === 'object') {
nullify(obj[k])
} else {
// 5
obj[k] = null
}
})
}
nullify(data.detail)
console.log('res', data.detail)
所以,基本上,我有这个对象(在 vue data() 中):
...
detail: {
title: 'I have no idea',
date: 2020-02-12,
sender: {
name: 'John Cenna',
username: 'john10'
},
receipent: {
name: 'Katleen',
username: 'katmeow'
},
....
}
现在,我想将它们全部指定为空(用于验证过程,某种程度上)但无法指定嵌套对象(没有子对象的对象只需循环即可)。我该怎么做呢?谢谢
一个递归的解决方案:
- 使用
Object.entries()
迭代对象的键值条目如下。请注意Object.entries()
return 是非对象的空数组。 - 如果条目的值已经是
null
或undefined
,return。 - 如果条目的值是数组,则对每个数组项进行递归(转到步骤 1,将数组项作为要计算的新对象)。
- 如果条目的值是一个对象,则对该对象进行递归。
- 否则,将条目的值设置为
null
。
const data = {
detail: {
title: 'I have no idea',
date: 2020 - 02 - 12,
sender: {
name: 'John Cenna',
username: 'john10'
},
receipent: {
name: 'Katleen',
username: 'katmeow'
},
items: [
{ id: 100, name: 'Apple' },
{ id: 200, name: 'Banana' },
{ id: 300, name: 'Orange' },
]
}
}
function nullify(obj) {
// 1
Object.entries(obj).forEach(([k,v]) => {
// 2
if (v === null || v === undefined) {
return
}
// 3
if (Array.isArray(v)) {
return v.forEach(nullify)
}
// 4
if (typeof v === 'object') {
nullify(obj[k])
} else {
// 5
obj[k] = null
}
})
}
nullify(data.detail)
console.log('res', data.detail)