簡體   English   中英

將嵌套對象數組轉換為類似JSON的對象?

[英]transform array of nested objects into a JSON like object?

我已經在很多地方找到了這個,但是找不到類似的地方。 我需要像這樣轉換嵌套objectsarray

var currentArr = [ 
  { name: 'Michael',   
    children: ['Lara'] 
  },
  { name: 'Susy',    
    children: ['Mike','Ana','Mary']
  },
  { name: 'Bruno', 
    children: ['Clark']
  }
]

變成這樣的JSON對象:

var result = [
    { 'name' : 'Michael', 
      'children': [
            { 'name' : 'Lara' }
    },
    { 'name' : 'Susy', 
      'children': [
            { 'name' : 'Mike' },
            { 'name' : 'Ana' },
            { 'name' : 'Mary' }
      ]
    },
    { 'name' : 'Bruno', 
       'children': [
            { 'name' : 'Clark' }
        ]
    }
]

我曾嘗試使用reducemap嵌套,但無法獲得所需的構建。 特別是當循環遍歷children的字符串數組時,我需要返回一個以name為鍵的映射結果。

它需要嵌套作為result ,並且currentArr將是入口點。

您可以映射每個children數組並返回一個新對象。

 var currentObj = [ { name: 'Michael', children: ['Lara'] }, { name: 'Susy', children: ['Mike','Ana','Mary'] }, { name: 'Bruno', children: ['Clark'] } ].map(function(item) { item.children = item.children.map(function(child) { return { name: child }; }); return item; }); console.log(currentObj); 

這種方式使原始數組保持不變:

var result = current.map(function (parent) {
    return {
        name: parent.name,
        children: parent.children.map(function (name) {
            return { name: name };
        })
    };
});

// if you want a JSON string representing the result object
var resultJSON = JSON.stringify(result);

另外,正如其他人指出的那樣,原始代碼段中的resultObj也不是有效的對象。 也許您打算將其作為數組?

如果可以就地修改當前數組是可接受的,則此ES2015代碼將足夠:

currentArr.forEach(function(p) {
    p.children = p.children.map(name => ({ name }));
});

arrow函數的返回值利用了新的ES2015語法,該語法表示對象文字中的裸鍵不帶值將使用該名稱的變量的當前值,即與編寫{ "name": name }

要使花括號不被解釋為函數體而不是對象文字,必須使用附加的括號。

我會這樣做:

 var currentArr = [{name: 'Michael',children: ['Lara']},{name: 'Susy', children: ['Mike', 'Ana', 'Mary']},{name: 'Bruno',children: ['Clark']}] const map = data => data.map(parent => ( parent.children.map( child => ({ name: child })), parent )) console.log(JSON.stringify(map(currentArr), null, 4)) 

注意:

與C ++不同,運營商JS ,回報分辯側不剩

 const data = (1,2,3,4,5,6) console.log(data) 

 var currentObj = [ { name: 'Michael', children: ['Lara'] }, { name: 'Susy', children: ['Mike','Ana','Mary'] }, { name: 'Bruno', children: ['Clark'] } ] for (var i=0, j=currentObj.length; i<j; i++) { currentObj[i].children = currentObj[i].children.map(function(item){return {name: item};}) } console.log(currentObj); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM