2016-06-07 39 views
2

我只需要將多維JSON切換到單個,以提供它爲js插件創建表。多維JSON到單個的

這裏有響應的例子:

[ 
    { 
    "services": [], 
    "id": 1, 
    }, 
    { 
    "services": [ 
     { 
     "status": { 
      ... 
     }, 
     "name": "NAME" 
     }, 
     { 
     "status": { 
      ... 
     }, 
     "name": "NAME 2" 
     } 
    ], 
    "id": 2 
    } 
] 

我找什麼:

[ 
    { 
     "services": [], 
     "id": 1, 
    }, 
    { 
     "service": {name: 'NAME', status: '' ...}, 
     "id": 2, 
    }, 
    { 
     "service": {name: 'NAME 2', status: '' ...}, 
     "id": 2, 
    } 
    ... 
] 

的想法是創建具有相同ID的條目的新陣,只有一個服務。

這裏有一個循環:

function parseData(json) { 
    var newArray = []; 
    for (i = 0; i < json.length; i++){ 
     var item = json[i]; 
     if (item.services.length > 0) { 
      for (j = 0; j < item.services.length; j++){ 

       item['service'] = item.services[j]; 
       newArray.push(item); 
      } 
     } 
     else { 
      newArray.push(item); 
     } 
    } 
    return newArray; 
} 

最後,而不是用不同的單服務進入兩個對象我得到兩個對象具有相同的「服務」項。這個循環有什麼問題?

這裏的jsfiddle:https://jsfiddle.net/ghea33x1/

謝謝。

回答

0

你在這個行業

item['service'] = json[i].services[j]; 

的一個快速方法變異的對象將與Array#forEach一個循環,不變異的來源。

var data = [{ "services": [], "id": 1, }, { "services": [{ "status": {}, "name": "NAME" }, { "status": {}, "name": "NAME 2" }], "id": 2 }], 
 
    grouped = []; 
 

 
data.forEach(function (a) { 
 
    if (!a.services.length) { 
 
     grouped.push(a); 
 
     return; 
 
    } 
 
    a.services.forEach(function (b) { 
 
     grouped.push({ services: b, id: a.id }); 
 
    }); 
 
}); 
 

 
console.log(grouped);

+0

好,看起來不錯,但如果JSON響應包含什麼對象的屬性未知數量?添加手動新屬性推方法'{服務:b,id:a.id,new_property:'價值'}'我認爲不是好主意。 – TheUser

+0

然後您需要遍歷這些屬性或使用[Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) –

+1

Nice,just added小修正https://jsfiddle.net/ghea33x1/1/ 救命恩,btw :) – TheUser