gpt4 book ai didi

javascript - 使用字符串数组创建多级对象,将数组解析为JS对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:35 25 4
gpt4 key购买 nike

我有这个数组需要解析成一个有用的对象。每个值的名称都是由/字符分隔的命名空间的集合。每个“/”之间的值需要转换为 JS 对象属性:

"status": [
{
"message": "OK",
"name": "/Computer",
"values": []
},
{
"name": "/Computer/CPU Usage",
"values": []
},
{
"name": "/Computer/CPU Temp",
"values": []
},
{
"name": "/Computer/hardware/memory",
"values": []
}
]

我需要它变成这样:

"status": {
"computer": {
"CPU Usage": {
"values": []
},
"CPU Temp": {
"values": []
},
"hardware": {
"memory": {
"values": []
}
}
}
}

到目前为止,我已经这样做了:

var statii = status, // from above..
_parsedStatii = {};

for (var i = 0; statii.length < 0; i ++) {
var _nameSpaces = statii[i].name.split('/');

// Start at 1 because index 0 is empty (before the first slash)
if (!_parsedStatii[_nameSpaces[1]]) {
_parsedStatii[_nameSpaces[1]] = {};
}

if (!_parsedStatii[_nameSpaces[1]][_nameSpaces[2]])
_parsedStatii[_nameSpaces[1]][_nameSpaces[2]] = {};


if (!_parsedStatii[_nameSpaces[1]][_nameSpaces[2]][_nameSpaces[3]])
_parsedStatii[_nameSpaces[1]][_nameSpaces[2]][_nameSpaces[3]] = {};


if (!_parsedStatii[_nameSpaces[1]][_nameSpaces[2]][_nameSpaces[3]][_nameSpaces[4]])
_parsedStatii[_nameSpaces[1]][_nameSpaces[2]][_nameSpaces[3]][_nameSpaces[4]] = {};

}

显然这还差得远,我尝试了很多递归函数,但还是有点不知所措。这个例子最清楚地说明了我想要达到的目标。有任何想法吗? (请原谅代码错别字,它被解释了)

最佳答案

您可以拆分名称并在其上构建对象。

var data = { "status": [{ "message": "OK", "name": "/Computer", "values": [] }, { "name": "/Computer/CPU Usage", "values": [] }, { "name": "/Computer/CPU Temp", "values": [] }, { "name": "/Computer/hardware/memory", "values": [] }] },
object = {};

data.status.forEach(function (a) {
a.name.slice(1).split('/').reduce(function (o, k) {
return o[k] = o[k] || {};
}, object).values = a.values;
});

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用字符串数组创建多级对象,将数组解析为JS对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160199/

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