从 .txt 文件 Javascript 创建包含 N' 个嵌套对象的嵌套对象

编程入门 行业动态 更新时间:2024-10-19 06:16:08
本文介绍了从 .txt 文件 Javascript 创建包含 N' 个嵌套对象的嵌套对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

经过多次尝试和搜索,我决定问,因为我卡住了.我有一个这样的 txt 文件:

After lots of tries and searching I decide to ask because I am stuck.I have a txt file like this:

CITYS CITYS.AREAS CITYS.AREAS.STREETS CITYS.AREAS.STREETS.HOUSES CITYS.AREAS.STREETS.HOUSES.ROOMS CITYS.AREAS.STREETS.HOUSES.ROOMS.KITCHEN CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TV CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TABLE CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TABLE.VASE CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TABLE.ASTREY CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS.BATHTUBE CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS.BATHTUBE.SHAMPOO CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS.BATHTUBE.CONTITIONER CITYS.AREAS.STREETS.HOUSES.GARDEN CITYS.AREAS.STREETS.HOUSES.GARDEN.POOL CITYS.AREAS.STREETS.HOUSES.GARDEN.POOL.WATER CITYS.AREAS.STREETS.HOUSES.GARDEN.TREE..... CITYS.AREAS.STREETS.CARS CITYS.AREAS.STREETS.CARS.BRAND... CITYS.AREAS.STREETS.CARS.BRAND.LOGO..... CITYS.AREAS.STREETS.CARS.COLOR.. CITYS.AREAS.STREETS.CARS.TYPE..

我想把它转换成这样的嵌套对象

And I want to convert it into a nested object like this

CITYS:{ AREAS:{ STREETS:{ HOUSES:{ ROOMS: { LIVINGROOMS: {TV,TABLE:{VASE,ASTREY}}, BATHROOMS: {BATHTUBE:{SHAMPOO,CONTITIONER},MIRROR}, ... }, GARDEN:{ ...... }, }, CARS:{ BRAND:{LOGO}, COLOR:{}, TYPE:{}, ...... }, }, } }

我正在做类似的事情(IN ARRAY)

I am tring to do somthing like that (IN ARRAY)

for(var line = 0; line < lines.length; line++){ var n = lines[line]; var ninpieces = n.split("."); var name=ninpieces[ninpieces.length-1]; var nametostore=ninpieces[ninpieces.length-2] ; CreateObject(name,nametostore); }; CreateObject=function(name,nametostore){ this.a= name; this.b= nametostore; newpar=this['b']; newchild=this['a']; this[newchild]=new Array(); if (typeof this[newpar] != "object") { this[newpar]=new Array(); } this[newchild].push(name); this[newpar].push(this[newchild]) stractureobj.push(this[newpar]) }

是我在 stackoverflow 中找到的一些东西的组合,但它不起作用.

Is a combination of things that I found here in stackoverflow but it's not working.

推荐答案

您可以使用以下代码.这个算法"还通过完全点的名称临时存储属性,作为相应嵌套对象的同义词.这样它可以快速检索到在哪里注入下一行的对象.

You can use the following code. This "algorithm" temporarily stores also properties by their fully dotted names, as synonyms for the corresponding nested objects. This way it can quickly retrieve where to inject the next line's object.

请注意,如果输入已排序,则算法执行速度最快.如有必要,您可以使用 lines.sort() 执行此操作.

Note that the algorithm performs fastest if the input is sorted. This you can do with lines.sort() if necessary.

function addNestedObject(obj, lines) { var map = { '': obj }; // Set starting point for empty path function addLine(line) { var name = line.split(".").pop(); var path = line.substr(0, line.length-name.length-1); if (!map[path]) addLine(path); // recurse to create parent if (!map[line]) map[line] = map[path][name] = {}; // set name & line synonym } // Process each line with above private function. for (var line of lines.slice().sort()) addLine(line); return obj; // Might be useful to have as return value as well }; // Sample input var lines = [ 'CITYS.AREAS', 'CITYS.AREAS.STREETS', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TV', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TABLE', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TABLE.VASE', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.LIVINGROOMS.TABLE.ASTREY', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS.BATHTUBE', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS.BATHTUBE.SHAMPOO', 'CITYS.AREAS.STREETS.HOUSES.ROOMS.BATHROOMS.BATHTUBE.CONTITIONER', 'CITYS.AREAS.STREETS.HOUSES.GARDEN', 'CITYS.AREAS.STREETS.HOUSES.GARDEN.POOL', 'CITYS.AREAS.STREETS.HOUSES.GARDEN.POOL.WATER', 'CITYS', ]; var stractureobj = { 'otherProperty': 42 }; // Convert lines to nested object and add to stractureobj addNestedObject(stractureobj, lines); // Output in snippet document.querySelector('pre').textContent=JSON.stringify(stractureobj, null, 4);

<pre></pre>

上面使用了一个对象stractureobj,它已经有自己的属性,必须添加嵌套结构.

The above uses an object stractureobj, with already its own properties, to which the nested structure must be added.

如果你只对一个只有嵌套结构的对象感兴趣,没有别的,你可以用空对象调用它并分配返回值:

If you are only interested to have an object with just the nested structure, and nothing else, you could call it with the empty object and assign the return value:

var stractureobj = addNestedObject({}, lines);

归结为与此相同:

var stractureobj = {}; addNestedObject(stractureobj, lines);

更多推荐

从 .txt 文件 Javascript 创建包含 N' 个嵌套对象的嵌套对象

本文发布于:2023-11-30 04:23:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1648710.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   对象   文件   txt   Javascript

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!