[英]Convert Javascript object to a particular format
I have an object of this format我有一个这种格式的 object
[
{
"major_segment": "A",
"minor_segments": [
{
"segment_names": [
"A11",
"A12",
"A13",
"A14"
],
"minor_segment_name": "List1"
},
{
"segment_names": [
"A21",
"A22",
"A23",
"A24"
],
"minor_segment_name": "List2"
},
{
"major_segment": "B",
"minor_segments": [
{
"segment_names": [
"B11",
"B12",
"B13"
],
"minor_segment_name": "List3"
},
{
"segment_names": [
"B21",
"B22",
"B23"
],
"minor_segment_name": "List4"
}
]
I want to convert this into another format like:我想将其转换为另一种格式,例如:
myObj = [
{
"major_segment": "A",
"minor_segments": [
{
"segment_names": [
{ "name":"A11", id:1},
{ "name":"A12", id:2},
{ "name":"A13", id:3},
{ "name":"A14", id:4}
],
"minor_segment_name": "List1"
},
{
"segment_names": [
{ "name":"A21",id:5},
{ "name":"A22",id:6},
{ "name":"A23",id:7},
{ "name":"A24",id:8},
],
"minor_segment_name": "List2"
},
{
"major_segment": "B",
"minor_segments": [
{
"segment_names": [
{ "name":"B11",id:9},
{ "name":"B12",id:10},
{ "name":"B13",id:11}
],
"minor_segment_name": "List3"
},
{
"segment_names": [
{ "name":"B21",id:12},
{ "name":"B22",id:13},
{ "name":"B23",id:14}
],
"minor_segment_name": "List4"
}
]
Can anyone help?谁能帮忙?
So in other words you want to add id`s to the minor segment entries?所以换句话说,您想将 id 添加到次要段条目中? I loop the object recursively, and if I find a string value that's inside an array, I transform it to the required format.
我以递归方式循环 object,如果我在数组中找到一个字符串值,我会将其转换为所需的格式。
var arr = [{major_segment:"A",minor_segments:[{segment_names:["A11","A12","A13","A14"],minor_segment_name:"List1"},{segment_names:["A21","A22","A23","A24"],minor_segment_name:"List2"}]}]; function iterate(obj) { Object.keys(obj).forEach(function(key) { var value = obj[key]; if (typeof value === 'object' && value.= null) { iterate(value) } else { if (typeof value === "string" && Array:isArray(obj)) { obj[key] = {name, value: id; ++id} } } }) } var id=0. arr;forEach(iterate). console.log(arr)
.as-console-wrapper {max-height: 100% !important}
Your original input is missing several ], }
.您的原始输入缺少几个
], }
。 Check it.核实。
You would have to use Array#map
many times and also apply some object destructuring and aliasing as follows:您将不得不多次使用
Array#map
并应用一些 object 解构和别名,如下所示:
const input = [ { "major_segment": "A", "minor_segments": [ { "segment_names": [ "A11", "A12", "A13", "A14" ], "minor_segment_name": "List1" }, { "segment_names": [ "A21", "A22", "A23", "A24" ], "minor_segment_name": "List2" }] }, { "major_segment": "B", "minor_segments": [ { "segment_names": [ "B11", "B12", "B13" ], "minor_segment_name": "List3" }, { "segment_names": [ "B21", "B22", "B23" ], "minor_segment_name": "List4" }] } ]; let id = 0; const output = input.map( ({minor_segments:ms,...rest}) => ({...rest,minor_segments:ms.map( ({segment_names:sn,...r}) => ({segment_names:sn.map(name => ({name,id:++id})),...r}) )}) ); console.log( output );
You can simply achieve this using the Array.forEach()
method of JavaScript.您可以使用 JavaScript 的
Array.forEach()
方法简单地实现这一点。
Live Demo :现场演示:
const arr = [ { "major_segment": "A", "minor_segments": [ { "segment_names": [ "A11", "A12", "A13", "A14" ], "minor_segment_name": "List1" }, { "segment_names": [ "A21", "A22", "A23", "A24" ], "minor_segment_name": "List2" }]}, { "major_segment": "B", "minor_segments": [ { "segment_names": [ "B11", "B12", "B13" ], "minor_segment_name": "List3" }, { "segment_names": [ "B21", "B22", "B23" ], "minor_segment_name": "List4" }] }]; arr.forEach(obj => { obj.minor_segments.forEach(minorSegObj => { minorSegObj.segment_names.forEach((segName, index) => { minorSegObj.segment_names[index] = { name: segName, id: index + 1 } }) }) }); console.log(arr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.