gpt4 book ai didi

javascript - 数据格式化问题 : Array to Object. 有什么简单的方法吗?

转载 作者:行者123 更新时间:2023-11-30 16:56:19 25 4
gpt4 key购买 nike

我试图将数组格式化为对象。它工作正常,但我需要知道,这是正确的还是错误的?还有其他标准方法吗?

为此我使用了 underscoreJS。

//我从API得到了什么

“A/a/1”= A -> 类别,a -> 子类别,1 -> 子类别的子类别。

["A", "A/a", "A/b", "A/a/1", "A/a/2", "B", "B/a"];

//我需要哪种格式。

[
{
"name":"A",
"parent":"",
"children":[
{
"name":"a",
"parent":"A",
"children":[
{
"name":"1",
"parent":"a",
"children":[

]
},
{
"name":"2",
"parent":"a",
"children":[

]
}
]
},
{
"name":"b",
"parent":"A",
"children":[

]
}
]
},
{
"name":"B",
"parent":"",
"children":[
{
"name":"a",
"parent":"B",
"children":[

]
}
]
}
]

我的代码:

var dataObj = function(){
this.name = "";
this.parent = "";
this.administrator = "";
this.children = [];
};


var d_ = [];

_.each(data, function(item, index){

var row = new dataObj();
var item_array = item.split("/"),
item_array_length = item_array.length;

if(item_array.length == 1){

row.name = item_array[0];
d_.push(row);

} else {

row.name = item_array[1];
row.parent = item_array[0];
var newC = d_[_.findIndex(d_, {name:item_array[0]})];

if(item_array.length == 2) {

newC.children.push(row);

} else if(item_array.length == 3) {


newC.children[_.findIndex(newC.children, {name: item_array[1]})]
.children.push({name : item_array[2], parent : item_array[1]});


}


}

});

更新子类别的级别没有限制。 “A/a/1/i/n/x/y……”

最佳答案

我觉得您的实现可以改进。以下是几种可能性:

  1. 为了减少处理时间,API 的返回数据结构可以是 ["A/b", "A/a/1", "A/a/2", "B/a "] 而不是 ["A", "A/a", "A/b", "A/a/1", "A/a/2", "B", "B/a"]
  2. _ 库似乎没有多大帮助,代码可以用纯 javaScript 实现。
  3. 可以使实现足够通用以处理任何级别的嵌套子项。当前的实现仅限于第 3 级。

我能想到的一个简单算法将包含以下高级步骤:

  1. 我们将 API 提供的数据称为 sampleArray
  2. 对于 sampleArray 的每个元素,我们有 currentSplittedElementArray = sampleArray[i].split('/');
  3. 让我们调用所需的输出作为 finalOutput
  4. 遍历 finalOutput 并测试元素是否已经存在 finalOutput[i].name === currentSplittedElementArray[0]
  5. 如果元素已经存在,那么让我们遍历 currentSplittedElementArray 并使用 currentSplittedElementArray 的元素更新 finalOutput 的相同元素。 (如果该元素尚未出现在 finalOutput 上,那么让我们首先在 finalOutput 上创建该元素,并用 currentSplittedElementArray 的元素填充它)

我知道上述算法可能看起来令人生畏,概述的步骤将包括在循环中重复调用一个函数或使用某种递归。但如果我要实现这样的事情,我会这样做。

我对我的方法中的任何改进/优化领域持开放态度。

关于javascript - 数据格式化问题 : Array to Object. 有什么简单的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29670944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com