js递归实现包名转换成对应的层级对象c

示例:由原对象{a: {test: 1, b: 2}} 根据a.b.c.d这样的包名转换为:{"a":{"test":1,"b":{"c":{"d":{}}}}}

说明:包名有"."分隔,本身代表着层级结构,而json对象本身也是由属性和值构成的,允许嵌套,因此现在就有一个需求,把包的描述字符串,转换成json类型,条件是要注意到已经存在的其他属性.本例中属性a的值是对象,因此要保留该,只对其内容做扩展,而属性b的值不是对象类型,因此要用对象覆盖掉,其他不存在的属性,要付给空对象.

本例使用递归实现:

function namespace(oNamespace, sPackage) {
    var obj = oNamespace;
   var  pkg = "";
    if(sPackage.indexOf(".")==-1){
		pkg = sPackage;
	}else{
		pkg = sPackage.substr(0,1);
	}
	if(pkg&&!(obj[pkg]&&obj[pkg] instanceof Object)){
		obj[pkg] = {};
	}
	if(sPackage.indexOf(".")!=-1){
		namespace(obj[pkg],sPackage.substr(2));
	}

    return obj;
}

测试代码:

var obj = namespace({a: {test: 1, b: 2}}, 'a.b.c.d');
console.log(JSON.stringify(obj));

结果:

{"a":{"test":1,"b":{"c":{"d":{}}}}} 

功能是做出来了,但不用递归是不是也能实现呢?我现在脑子乱,不想做了,请读者思考?

时间: 2024-10-06 21:40:26

js递归实现包名转换成对应的层级对象c的相关文章

json里的日期字符串 怎么 转换成 javascript 的 Date 对象?

“/Date(1232035200000)/” 怎么转换成  javascript 的 Date 对象 做法:new Date(+/\d+/.exec(value)[1]); value就是json字符串,字符串内容是 /Date(ticks)/,其中 ticks 表示从 epoch (UTC) 开始的毫秒数.因此,UTC 时间 1989 年 11 月 29 日 4:55:30 AM 将编码为“/Date(628318530718)/”.

js中把JSON字符串转换成JSON对象最好的方法

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用jQuery的each方法来遍历 用jQuery解析JSON数据的方法,作为jQuery异步请求的传输对象,jQuery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明. 这里首先

递归代码将十进制转换成二进制输出

这段代码将十进制转换成二进制输出,代码很简洁干练 #include<stdio.h> #include<string.h> void DtoB(int n) {  if(n)  {   DtoB(n/2);   printf("%d",n%2);  } } int main() {  int n;  scanf("%d",&n);  DtoB(n);  return 0; }

JS 如何将“在线图片资源”转换成“base64”

在实现html2canvas截图的功能时,发现不支持"图片跨域",这可伤脑筋了: 偶然发现如果将"在线图片资源"转换成base64后,用base64渲染,这样完美解决问题: 因为图片时跨域的,所以我们在转换过程中需要加一段代码,用来支持跨域: image.crossOrigin = "*"; 完整代码如下: function getBase64Image(img) { var canvas = document.createElement(&qu

js字符串或则布尔值转换成数字类型的四种方法

1.parseInt() 2.parseFloat() 3.Number() 4.通过减法或者乘法把其他类型的值转换为数字类型 例子: // 转换成数字类型的4种方法 // 1.parseInt var a = '1.03'; var b = '1.01a'; var c = 'a1'; var d = true; var e = false; console.log(parseInt(a)); // 1 小数字符串,使用parseInt会把小数取整 console.log(parseInt(b

SpringMVC 中List 对象转换成Json格式 List对象中属性为NUll解决

问题起因:今天在做一个EasyUI 同步树的时候,在SpringMVC中用 @ResponseBody标签将List<tree> 集合转换成Json数据的时候,出现一些原因. 问题描述:1.tree对象有个List<tree>属性需要为空,这个是做树用的,下级没值当然不能有null了 代码: [{"id":1,"text":"权限管理 ","state":"closed  ",&qu

js 时间类型/Date(1411401600)转换成 (yyyy-MM-dd)类型

js前端中使用 function data_string(str) { var d = eval('new ' + str.substr(1, str.length - 2)); var ar_date = [d.getFullYear(), d.getMonth() + 1, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()]; for (var i = 0; i < ar_date.length; i++) ar_date[i

在JS中如何把毫秒转换成规定的日期时间格式

最近做的一个项目,从后台查询到日期数据传到前台JS中遍历之后显示的是以"14"开头的毫秒数,刚开始想用"simpleDateFormat"类处理,结果显示都不显示了.后来查了一下资料,感觉其实很简单,下面 把自己的方法分享给大家以供参考. 1.显示的毫秒数 2.处理之前的样式 3.处理之后的样式 1 Date.prototype.toLocaleString = function() { 2 return this.getFullYear() + "-&q

js把字符串(yyyymmdd)格式转换成日期格式(yyyy-mm-dd)

var dateString = "20151208180700"; var pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/; var formatedDate = dateString.replace(pattern, '$1-$2-$3 $4:$5:$6'); alert(formatedDate); console.log(formatedDate);