使用此特定对象格式的白名单嵌套属性
Whitelist nested properties using this particular object format
需要 "whitelist" 对象看起来像这样:
{
a: {
b: {
c: ''
}
}
}
适用于:
{
a: {
b: {
c: 1
}
d: 2
e: 3
}
}
结果:
{
a: {
b: {
c: 1
}
}
}
有什么建议吗?不确定如何使用下划线来实现它。正在查看 _.pick 但 运行 遇到了嵌套问题。
我会写一个这样的函数:
function filter_nested_properties_in_object(allowed_properties, original_object) {
if (_.contains(['boolean', 'number', 'string'], typeof original_object))
return original_object;
var filtered_object = {};
_.each(allowed_properties, function(allowed_value, property_name) {
var original_value = original_object[property_name];
if (original_value !== undefined)
filtered_object[property_name] = filter_nested_properties_in_object(
allowed_value, original_value);
});
return filtered_object;
}
将您的 "whitelist object" 作为 allowed_properties
传递,并将您要应用它的对象作为 original_object
。
递归 Array.prototype.reduce()
:
function getPaths(obj, whiteList) {
return Object.keys(whiteList)
.reduce(function(whiteObj, key) {
if (!obj.hasOwnProperty(key)) {
} else if(typeof obj[key] === 'object') {
whiteObj[key] = getPaths(obj[key], whiteList[key]);
} else {
whiteObj[key] = obj[key];
}
return whiteObj;
}, {})
}
var whiteList = {
a: {
b: {
c: ''
}
},
g: ''
};
var obj = {
a: {
b: {
c: 1
},
d: 2,
e: 3
}
};
var result = getPaths(obj, whiteList);
console.log(result);
不创建自定义函数,一种方法是使用标准的内置对象方法,例如 JSON.stringify 和 JSON.parse。 JSON.stringify 接受三个参数(值、替换符?、space?)。 Replacer 可以是自定义节点访问者函数,也可以是将 属性 键列入白名单的数组。根据以上信息,下面的代码将实现你想要完成的:
var obj= {
a: {
b: {
c: 1
},
d: 2,
e: 3
}
};
var tempstr=JSON.stringify(obj.a,['b']);
var newobj=JSON.parse(tempstr);
obj.a=newobj;
obj // 现在应该给你白名单对象
需要 "whitelist" 对象看起来像这样:
{
a: {
b: {
c: ''
}
}
}
适用于:
{
a: {
b: {
c: 1
}
d: 2
e: 3
}
}
结果:
{
a: {
b: {
c: 1
}
}
}
有什么建议吗?不确定如何使用下划线来实现它。正在查看 _.pick 但 运行 遇到了嵌套问题。
我会写一个这样的函数:
function filter_nested_properties_in_object(allowed_properties, original_object) {
if (_.contains(['boolean', 'number', 'string'], typeof original_object))
return original_object;
var filtered_object = {};
_.each(allowed_properties, function(allowed_value, property_name) {
var original_value = original_object[property_name];
if (original_value !== undefined)
filtered_object[property_name] = filter_nested_properties_in_object(
allowed_value, original_value);
});
return filtered_object;
}
将您的 "whitelist object" 作为 allowed_properties
传递,并将您要应用它的对象作为 original_object
。
递归 Array.prototype.reduce()
:
function getPaths(obj, whiteList) {
return Object.keys(whiteList)
.reduce(function(whiteObj, key) {
if (!obj.hasOwnProperty(key)) {
} else if(typeof obj[key] === 'object') {
whiteObj[key] = getPaths(obj[key], whiteList[key]);
} else {
whiteObj[key] = obj[key];
}
return whiteObj;
}, {})
}
var whiteList = {
a: {
b: {
c: ''
}
},
g: ''
};
var obj = {
a: {
b: {
c: 1
},
d: 2,
e: 3
}
};
var result = getPaths(obj, whiteList);
console.log(result);
不创建自定义函数,一种方法是使用标准的内置对象方法,例如 JSON.stringify 和 JSON.parse。 JSON.stringify 接受三个参数(值、替换符?、space?)。 Replacer 可以是自定义节点访问者函数,也可以是将 属性 键列入白名单的数组。根据以上信息,下面的代码将实现你想要完成的:
var obj= {
a: {
b: {
c: 1
},
d: 2,
e: 3
}
};
var tempstr=JSON.stringify(obj.a,['b']);
var newobj=JSON.parse(tempstr);
obj.a=newobj;
obj // 现在应该给你白名单对象