Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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_Jquery_Json_Underscore.js - Fatal编程技术网

如何将javaScript对象中的所有空值替换为';空';一串

如何将javaScript对象中的所有空值替换为';空';一串,javascript,jquery,json,underscore.js,Javascript,Jquery,Json,Underscore.js,假设我有一个js对象: {"a": null, "b": 5, "c": 0, d: "", e: [1,2,null, 3]} 这就是我想要的: {"a": "null", "b": 5, "c": 0, d: "", e: [1,2,"null", 3]} 我唯一的想法就是使用: function nullToString(v) { return JSON.parse(JSON.stringify(v).split(":null").join(":\"null\"")); }

假设我有一个js对象:

{"a": null, "b": 5, "c": 0, d: "", e: [1,2,null, 3]}
这就是我想要的:

{"a": "null", "b": 5, "c": 0, d: "", e: [1,2,"null", 3]}
我唯一的想法就是使用:

function nullToString(v) {
    return JSON.parse(JSON.stringify(v).split(":null").join(":\"null\""));
}
但与我希望实现的目标相比,这似乎是一个相当昂贵的操作


如果jQuery或下划线.js中有任何有用的方法,那就太好了。

这适用于您提供的数据:

var data = {"a": null, "b": 5, "c": 0, d: "", e: [1,2,null, 3]};

function nullToString(value) { 

    function recursiveFix(o) {
        // loop through each property in the provided value
        for(var k in o) {
            // make sure the value owns the key
            if (o.hasOwnProperty(k)) { 
                if (o[k]===null) {
                    // if the value is null, set it to 'null'
                    o[k] = 'null';
                } else if (typeof(o[k]) !== 'string' && o[k].length > 0) {
                    // if there are sub-keys, make a recursive call
                    recursiveFix(o[k]);
                }
            }
        }
    }

    var cloned = jQuery.extend(true, {}, value)
    recursiveFix(cloned);
    return cloned;
}

console.log(nullToString(data));
基本前提是递归地循环对象的属性,如果值为null,则替换该值


当然,你的问题的根源是“我想要更快的东西。”我邀请你描述一下你的解决方案,这一个,以及你遇到的任何其他解决方案。您的结果可能会令人惊讶。

以下是一个非常简单的示例:

函数convertObjectValuesRecursive(对象、目标、替换){
obj={……obj};
Object.keys(obj.forEach)((key)=>{
if(obj[键]==目标){
obj[键]=替换;
}else if(object[key]='object'&&!Array.isArray(obj[key])){
obj[key]=convertObjectValuesRecursive(obj[key],目标,替换);
}
});
返回obj;

}
您始终可以通过迭代所有对象键(以及“子键”等)手动执行此操作。这可能是最快的解决方案。我希望有一些非强制性的解决方案……看看:[如何迭代json hashmap][1][1]:您已经展示了简短的解决方案。在这种情况下,您应该在快速工作和短代码之间进行选择。请尝试:
JSON.parse(JSON.stringify(…).split(“null”),join(“null”)
。这种
分割连接
方法在我的情况下比
替换
产生了更好的结果。-当键是字符串时,递归问题太多了…@mnowotka我想这是另一个答案…而且函数不返回任何内容。它修改原始值。因此
console.log(nullToString(value))
将始终返回未定义的值。但是
nullToString(value);console.log(value);
将更新您的值。哦,我明白了。我需要一个函数返回一些内容,而不是修改对象,这样我就可以将其用作装饰器。很简单,只需克隆对象。请参阅我的更新。我正在使用
jQuery.extend()对于克隆,<>代码>,但是如果你想要的话,你也可以使用。克隆确实使这明显慢了(与SrimTime/St/连接/解析解决方案相称)。如果你不介意原来的对象被修改,那么克隆就不再必要了,你可以通过简单的返回对象来恢复丢失的速度。