2017-10-20 63 views
0

我有以下数组。使用Javascript收集数据

var data = [ 
    { 
    'key': "Parent A", 
    'value': [{ 
     'key': "Child A.1", 
     'value': "A1" 
    }] 
    }, 
    { 
    'key': "Parent B", 
    'value': [{ 
     'key': "Child B.1", 
     'value': "B1" 
     }, 
     { 
     'key': "Child B.2", 
     'value': "B2" 
     } 
    ] 
    } 
] 

我需要创建一个新的数组,其中子元素将在一行中。

例如,

{ info: 'outside = (Parent B) inside(Child B.1 , Child B.2)' } 

我曾尝试下面的代码

var newData = [] 
data.forEach(function(elements) { 
    var elOne = elements.value 

    for (var childElement = 0; childElement < elOne.length; childElement++) { 
    var r = elOne[childElement].key 
    newData.push({ 
     'info': "outside = (" + elements.key + ") inside(" + r + ")" 
    }) 
    } 
}) 

console.log("--------------------") 
newData.forEach(yy=> console.log(yy)) 

结果是这样的

{ info: 'outside = (Parent A) inside(Child A.1)' } 
{ info: 'outside = (Parent B) inside(Child B.1)' } 
{ info: 'outside = (Parent B) inside(Child B.2)' } 

我怎样才能解决这个问题?

+0

你可以显示你所需的输出而不是一些复杂的表示吗? –

+0

@RajaprabhuAravindasamy我认为实际上是所需的输出格式,由代码结构来判断。 – ADyson

+0

{info:'outside =(Parent B)inside(Child B.1,Child B.2)'} – TheTechGuy

回答

3

基本上你不想做的每一个元素childElement新的“推”,而是要连接所有的子元素转换为字符串,并做一个“推”每包含连接字符串父元素:

var data = [ 
 

 
    { 
 
    'key': "Parent A", 
 
    'value': [{ 
 
     'key': "Child A.1", 
 
     'value': "A1" 
 
    }] 
 
    }, 
 
    { 
 
    'key': "Parent B", 
 
    'value': [{ 
 
     'key': "Child B.1", 
 
     'value': "B1" 
 
     }, 
 
     { 
 
     'key': "Child B.2", 
 
     'value': "B2" 
 
     } 
 
    ] 
 
    } 
 
]; 
 
var newData = []; 
 
data.forEach(function(elements) { 
 
    var elOne = elements.value; 
 
    var r = ""; 
 
    for (var childElement = 0; childElement < elOne.length; childElement++) { 
 
    if (r != "") r += ", "; 
 
    r += elOne[childElement].key; 
 
    } 
 
    newData.push({ 
 
    'info': "outside = (" + elements.key + ") inside(" + r + ")" 
 
    }) 
 

 
}) 
 

 
console.log("--------------------") 
 
newData.forEach(yy => console.log(yy))

+1

非常感谢你 – TheTechGuy

+0

@myCode请将此标记为正确答案,然后 – MEE

1

你可以做这样的事情:

const newData = []; 
 
const data = [ 
 
     { 
 
       'key' : "Parent A", 
 
       'value' : [ { 'key' : "Child A.1", 'value' : "A1" } ] 
 
     }, 
 
     { 
 
       'key' : "Parent B", 
 
       'value' : [ { 'key' : "Child B.1", 'value' : "B1" }, { 'key' : "Child B.2", 'value' : "B2" } ] 
 
     } 
 
]; 
 

 
data.forEach((elem) => { 
 
\t const child = elem.value.map((o) => o.key).join(' , '); 
 
\t newData.push({ info: `outside = (${elem.key}) inside(${child})` }); 
 
}); 
 

 
console.log(newData);

在这里,我迭代data阵列上,我从value财产所有按键与Array.map()功能,最后,我concate他们Array.join()

+0

哇,这个真的很酷。谢谢 – TheTechGuy

+0

不客气:) – DarkyZ