大佬教程收集整理的这篇文章主要介绍了javascript – 如何实现此逻辑,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
var obj = { a : 1,b : [x,y,z],c : [0,1,3],d : ['%','-','+'] }
我想将该对象转换为以下格式
{ 1 : { x : { 0 : ['%','+'],// Last index remains as an array 1 : ['%',3 : ['%','+'] },y : { 0 : ['%',z : { 0 : ['%','+'] } } }
如果在上述情况下[‘%’,’ – ‘,”]之后还有一个属性,则相同的过程继续..
var v = {}/* Object of above */,keys = Object.keys(v),simplifiedcolumns = {}; for (var i = 0,l = keys.length; i < l ; i++) { if (v[i] instanceof Array) { }else{ simplifiedcolumns[keys[i]] = simplifiedcolumns[keys[i]] || {}; } }
请建议我完成这个逻辑.
此外,以下示例假定键的顺序(由Object.keys()提供)与定义对象的顺序相同.情况并非总是如此,因此更好的解决方案是将对象更改为数组:
var obj = [ { "key": "a","value": 1 },{ "key": "b","value": ["x","y","z"] },{ "key": "c","value": [0,3] },{ "key": "d","value": ['%','+'] } ];
但无论如何,这里是使用原始对象表示法的算法:
var obj = { a : 1,b : ["x","z"],'+'] }; var keys = Object.keys(obj); //set tempObj to the last array var tempObj = obj[keys[keys.length - 1]]; //traverse the rest of the keys BACkWARDs for (var i = keys.length - 2; i >= 0; i--) { var key = keys[i]; //create new empty object var newObj = {}; //append "tempObj" to that object and using the keys that are in the current array //or if the property isn't an array,use the property itself as key if (Array.isArray(obj[key])) { for (var k = 0; k < obj[key].length; k++) { newObj[obj[key][k]] = tempObj; } } else { newObj[obj[key]] = tempObj; } //override tempObj with the new created object tempObj = newObj; }
顺便说一句,如果您需要单独的独立对象,您可以更改该行
newObj[obj[key]] = tempObj;
喜欢的东西
newObj[obj[key]] = copyObject(tempObj);
其中copyObject是一个创建对象深层副本的函数.但我想在这种情况下,由于你一遍又一遍地复制相同的对象,性能将急剧下降.
以上是大佬教程为你收集整理的javascript – 如何实现此逻辑全部内容,希望文章能够帮你解决javascript – 如何实现此逻辑所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。