Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用此特定对象格式的白名单嵌套属性_Javascript_Json_Underscore.js_Lodash - Fatal编程技术网

Javascript 使用此特定对象格式的白名单嵌套属性

Javascript 使用此特定对象格式的白名单嵌套属性,javascript,json,underscore.js,lodash,Javascript,Json,Underscore.js,Lodash,需要“白名单”对象如下所示: { a: { b: { c: '' } } } function filter_nested_properties_in_object(allowed_properties, original_object) { if (_.contains(['boolean', 'number', 'string'], typeof original_object)) return

需要“白名单”对象如下所示:

{
    a: {
        b: {
            c: ''
        }
    }
}
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;
}
适用于:

{
    a: {
        b: {
            c: 1
        }
        d: 2
        e: 3
    }
}
结果:

{
    a: {
        b: {
            c: 1
        }
    }
}

有什么建议吗?不确定如何使用下划线实现此功能。正在查看uu.pick,但在嵌套时遇到了问题。

我将编写如下函数:

{
    a: {
        b: {
            c: ''
        }
    }
}
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;
}

将您的“白名单对象”作为
允许的\u属性传递,并将要将其应用到的对象作为
原始\u对象传递,使用
数组.prototype.reduce()递归传递:

函数getpath(obj,白名单){
返回Object.keys(白名单)
.reduce(功能(白色对象,键){
如果(!obj.hasOwnProperty(键)){
}else if(对象的类型[键]=“对象”){
whiteObj[key]=获取路径(obj[key],白名单[key]);
}否则{
whiteObj[key]=obj[key];
}
返回whiteObj;
}, {})
}
var白名单={
a:{
b:{
c:'
}
},
g:'
};
var obj={
a:{
b:{
c:1
},
d:2,
e:3
}
};
var结果=获取路径(obj,白名单);

控制台日志(结果)不创建自定义函数,一种方法是使用标准的内置对象方法,如JSON.stringify和JSON.parse。stringify接受三个参数(value、replacer?、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//现在应该给你白名单上的对象

SO的全部目的是发布你遇到麻烦的代码,而不是让我们为你做这些工作。如果需要帮助,请共享代码