Leo*_*ill 11 javascript recursion object javascript-objects
我需要找到$meta从对象中删除所有属性及其值的最快方法,例如:
{
"part_one": {
"name": "My Name",
"something": "123",
"$meta": {
"test": "test123"
}
},
"part_two": [
{
"name": "name",
"dob": "dob",
"$meta": {
"something": "else",
"and": "more"
}
},
{
"name": "name",
"dob": "dob"
}
],
"$meta": {
"one": 1,
"two": 2
}
}
Run Code Online (Sandbox Code Playgroud)
应该成为以下内容,因为$meta属性可能位于对象中的任何位置,因此可能需要某种形式的递归.
{
"part_one": {
"name": "My Name",
"something": "123"
},
"part_two": [
{
"name": "name",
"dob": "dob"
},
{
"name": "name",
"dob": "dob"
}
]
}
Run Code Online (Sandbox Code Playgroud)
任何帮助或建议将不胜感激!
谢谢!
Jos*_*kle 27
一个简单的自我调用功能就可以做到.
function removeMeta(obj) {
for(prop in obj) {
if (prop === '$meta')
delete obj[prop];
else if (typeof obj[prop] === 'object')
removeMeta(obj[prop]);
}
}
Run Code Online (Sandbox Code Playgroud)
var myObj = {
"part_one": {
"name": "My Name",
"something": "123",
"$meta": {
"test": "test123"
}
},
"part_two": [
{
"name": "name",
"dob": "dob",
"$meta": {
"something": "else",
"and": "more"
}
},
{
"name": "name",
"dob": "dob"
}
],
"$meta": {
"one": 1,
"two": 2
}
}
function removeMeta(obj) {
for(prop in obj) {
if (prop === '$meta')
delete obj[prop];
else if (typeof obj[prop] === 'object')
removeMeta(obj[prop]);
}
}
removeMeta(myObj);
console.log(myObj);Run Code Online (Sandbox Code Playgroud)
Kyl*_*yle 15
// Helper function
function removeProps(obj,keys){
if(obj instanceof Array){
obj.forEach(function(item){
removeProps(item,keys)
});
}
else if(typeof obj === 'object'){
Object.getOwnPropertyNames(obj).forEach(function(key){
if(keys.indexOf(key) !== -1)delete obj[key];
else removeProps(obj[key],keys);
});
}
}
// The object we want to iterate
var obj = {
"part_one": {
"name": "My Name",
"something": "123",
"$meta": {
"test": "test123"
}
},
"part_two": [
{
"name": "name",
"dob": "dob",
"$meta": {
"something": "else",
"and": "more"
}
},
{
"name": "name",
"dob": "dob"
}
],
"$meta": {
"one": 1,
"two": 2
}
};
// Utilize the utility
removeProps(obj,['$meta']);
// Show the result
document.body.innerHTML = '<pre>' + JSON.stringify(obj,null,4) + '</pre>';Run Code Online (Sandbox Code Playgroud)
Ren*_*ler 15
正如@floor上面评论的那样:
JSON.parse(JSON.stringify(obj, (k,v) => (k === '$meta')? undefined : v))