gpt4 book ai didi

javascript - 对于此映射对象和数组,哪种数组函数是更有效的选择?

转载 作者:行者123 更新时间:2023-12-03 04:59:43 24 4
gpt4 key购买 nike

我正在格式化 D3 树可视化的数据,我的子对象都是数组和具有更多子对象的对象。我需要它们位于子数组中才能使树正常工作。它现在可以工作,但感觉这不是实现这一目标的非常有效的方法。

我有 Angular 和 D3 方法可用。我用普通 JS 编写了这个冗长的函数。

记录到控制台的数据格式正确。未格式化的数据是初始对象。

感谢您的浏览

<!DOCTYPE html>
<meta charset="UTF-8">
<style>


</style>

<body>

<div id=tree></div>
<script>
var unformattedData = {
"city": "All Cities",
"children": {
"group_a": {
"wins": "20"
},
"group_b": {
"wins": "15"
},
"group_c": [{
"city": "NYC",
"wins": "25",
"losses": "2",
"children": {
"group_a": {
"wins": "5"
},
"group_b": {
"wins": "3"
},
"group_c": [{
"city": "SFO",
"wins": "3",
"losses": "1",
"children": {
"group_a": {
"wins": "0"
},
"group_b": {
"wins": "0"
},
"group_c": [{
"city": "LON",
"wins": "2",
"losses": "0"
}],
"group_d": [{
"city": "LAX",
"wins": "2",
"losses": "0"
}]
}
}, {
"city": "SFO",
"wins": "2",
"losses": "1",
"children": {
"group_a": {
"wins": "0"
},
"group_b": {
"wins": "0"
},
"group_c": [{
"city": "LON",
"wins": "2",
"losses": "0"
}],
"group_d": [{
"city": "LAX",
"wins": "2",
"losses": "0"
}]
}
}, {
"city": "NYC",
"wins": "2",
"losses": "0",
"children": {
"group_a": {
"wins": "0"
},
"group_b": {
"wins": "0"
},
"group_c": [{
"city": "LON",
"wins": "2",
"losses": "0"
}],
"group_d": [{
"city": "LAX",
"wins": "2",
"losses": "0"
}]
}
}],
"group_d": [{
"city": "LAX",
"wins": "2",
"losses": "0",
"children": {}
}, {
"city": "LAX",
"wins": "1",
"losses": "1",
"children": {}
}, {
"city": "LAX",
"wins": "2",
"losses": "0",
"children": {}
}]
}
}, {
"city": "SFO",
"wins": "1",
"losses": "1",
"children": {
"group_a": {
"wins": "1"
},
"group_b": {
"wins": "1"
},
"group_c": [{
"city": "PDX",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "PHX",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "JFK",
"wins": "1",
"losses": "1",
"children": {}
}],
"group_d": [{
"city": "LGB",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "SEA",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "JFK",
"wins": "1",
"losses": "0",
"children": {}
}]
}
}, {
"city": "NYC",
"wins": "1",
"losses": "0",
"children": {
"group_a": {
"wins": "1"
},
"group_b": {
"wins": "1"
},
"group_c": [{
"city": "LON",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "LON",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "LON",
"wins": "1",
"losses": "1",
"children": {}
}],
"group_d": [{
"city": "LAX",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "LGB",
"wins": "1",
"losses": "0",
"children": {}
}, {
"city": "PHX",
"wins": "1",
"losses": "0",
"children": {}
}]
}
}],
"group_d": [{
"city": "CLT",
"wins": "6",
"losses": "0",
"children": {
"group_a": {
"wins": "0"
},
"group_b": {
"wins": "0"
},
"group_c": [{
"city": "LON",
"wins": "2",
"losses": "0"
}],
"group_d": [{
"city": "LAX",
"wins": "2",
"losses": "0"
}]
}
}, {
"city": "DAL",
"wins": "5",
"losses": "0",
"children": {
"group_a": {
"wins": "0"
},
"group_b": {
"wins": "0"
},
"group_c": [{
"city": "LON",
"wins": "2",
"losses": "0"
}],
"group_d": [{
"city": "LAX",
"wins": "2",
"losses": "0"
}]
}
}, {
"city": "BUR",
"wins": "4",
"losses": "0",
"children": {
"group_a": {
"wins": "0"
},
"group_b": {
"wins": "0"
},
"group_c": [{
"city": "LON",
"wins": "2",
"losses": "0"
}],
"group_d": [{
"city": "LAX",
"wins": "2",
"losses": "0"
}]
}
}]
}
};

var formattedData = {};

function createTree(d) {
if (d.children) {
if (d.children.typeof = 'Obj') {
var childrenArray = [];

if (d.children.group_b) {
d.children.group_b.content = 'hello';
d.children.group_b.message_group = 'group b';
childrenArray.push(d.children.group_b);
}

if (d.children.group_a) {
d.children.group_a.content = 'goodbye';
d.children.group_a.message_group = 'group a';
childrenArray.push(d.children.group_a);
}

if (d.children.group_c) {
d.children.group_c.forEach(function(child, index) {
child.message_group = 'group c';
childrenArray.push(child);
});
}

if (d.children.group_d) {
d.children.group_d.forEach(function(child, index) {
child.message_group = 'group d';
childrenArray.push(child);
});
}

d.children = childrenArray.reverse();
d.children.forEach(createTree);
}
}
formattedData = d;
console.log(formattedData);
}

createTree(unformattedData)

</script>
</body>

最佳答案

function createTree(d) {
if (d.children && d.children.typeof = 'Obj') {
var childrenArray = [];
//may a bit shorter way of assigning the props
for(k in d.children){
childrenArray.push(Object.assign(d.children[k],
{
group_b:{
content:'hello',
message_group:'group b',
}
group_a:{
content:'goodbye',
message_group:'group a'
}
}[k]||{});
}
//shorter way of if
(d.children.group_c||[]).forEach(function(child, index) {
child.message_group = 'group c';
childrenArray.push(child);
});

(d.children.group_d||[]).forEach(function(child, index) {
child.message_group = 'group d';
childrenArray.push(child);
});
}
//i think theres no need for this lines

d.children = childrenArray.reverse();
setTimeout(function(){d.children.forEach(createTree)});//=> recursion to walking,better performance
}
}

关于javascript - 对于此映射对象和数组,哪种数组函数是更有效的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42282174/

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