2016-11-25 51 views
2

我有JSON在下面的格式:如何使用陣列分割JSON對象爲單獨的對象

{ 
    "line_items": [ 
     { 
      "rate": ["10", "20"], 
      "description": ["desc 1", "desc 2"], 
      "name": ["name 1", "name 2"] 
     } 
    ] 
} 

元件的陣列中的數量可以變化,但是每個元件的陣列將始終是相同的大小作爲彼此。我通過將對象拆分爲多個對象來移除數組。

這樣的:

{ 
    "line_items": [ 
     { 
      "rate": "10", 
      "description": "desc 1", 
      "name": "name 1" 
     }, 
     { 
      "rate": "20", 
      "description": "desc 2", 
      "name": "name 2" 
     } 
    ] 
} 

我需要用JavaScript來做到這一點。

有沒有一個功能可以爲我做到這一點?我想我可能不得不使用foreach循環,但不知道如何處理它。

+1

*如果你的意思是否有一個內置的功能「是否有可能爲我做這樣的功能?」 *。 –

+0

使用a爲每個獲取所有屬性,然後爲任何一個屬性迭代以創建數組的對象 –

回答

0

var obj = { 
 
    "line_items": [ 
 
     { 
 
      "rate": ["10", "20"], 
 
      "description": ["desc 1", "desc 2"], 
 
      "name": ["name 1", "name 2"] 
 
     } 
 
    ] 
 
} 
 

 
var props = []; 
 
for (var key in obj.line_items[0]) { 
 
    props.push(key); 
 
} 
 

 
var arrD = []; 
 

 
obj.line_items[0].rate.forEach(function(ele,ind){ 
 
var temp = {}; 
 
props.forEach(function(innerEle){ 
 
    temp[innerEle] = obj.line_items[0][innerEle][ind]; 
 
}); 
 
arrD.push(temp); 
 
}); 
 
var obj = {"line_items" : arrD} 
 
console.log(obj);

obj.line_items[0].rate.forEach(function(ele,ind){ 
    var temp = {}; 
    props.forEach(function(innerEle){ 
    temp[innerEle] = obj.line_items[0][innerEle][ind]; 
    }); 
    arrD.push(temp); 
}); 
0

這應該工作

function itemExpander(json) { 
    var result = {line_items: []}; 
    var item = json.line_items[0] 

    for (var i = 0; i < item.rate.length; i++) { 
    result.line_items.push({ 
     rate: item.rate[i], 
     description: item.description[i], 
     name: item.name[i], 
    }) 
    } 

    return result; 
} 
0

使用它

var obj = { 
 
    "line_items": [ 
 
     { 
 
      "rate": ["10", "20"], 
 
      "description": ["desc 1", "desc 2"], 
 
      "name": ["name 1", "name 2"] 
 
     } 
 
    ] 
 
}; 
 

 
length = obj.line_items[0].rate.length; 
 

 
newObject ={}; 
 
var limits = []; 
 

 
for(var i=0; i < length ; i++){ 
 
      newObject["rate"] = obj.line_items[0].rate[i]; 
 
      newObject["description"]= obj.line_items[0].description[i]; 
 
      newObject["name"]=obj.line_items[0].name[i]; 
 
      limits.push(newObject); 
 
      newObject ={} 
 
    } 
 

 
var lastObject = {"line_items":limits}; 
 
console.log(lastObject);

0

遞歸就地方法:

var object = { 
    "line_items": [ 
     { 
      "rate": ["10", "20"], 
      "description": ["desc 1", "desc 2"], 
      "name": ["name 1", "name 2"] 
     } 
    ] 
}; 

function oneIntoMany(list) { 
    var obj = list[0]; 
    var tmp_obj = {}; 
    var again = true; 
    for(var prop in obj){ 
     if(obj.hasOwnProperty(prop)){ 
      if(obj[prop].length > 1){ 
       tmp_obj[prop] = obj[prop].pop(); 
      }else{ 
       obj[prop] = obj[prop][0]; 
       again = false; 
      } 
     } 
    } 
    if(again){ 
     list.push(tmp_obj); 
     oneIntoMany(list); 
    } 
} 

oneIntoMany(object.line_items); 
console.log(object); 
0

這裏是一個可行的解決方案。希望能幫助到你!

var obj = { 
 
    "line_items": [ 
 
     { 
 
      "rate": ["10", "20"], 
 
      "description": ["desc 1", "desc 2"], 
 
      "name": ["name 1", "name 2"] 
 
     } 
 
    ] 
 
} 
 

 
var arr1 = []; 
 
var arr2 = []; 
 
var arr3 = []; 
 
var result = {line_items: []}; 
 

 
for(var i in obj){ 
 
    for(var j in obj[i]){ 
 
    var myObject = obj[i]; 
 
    if(myObject[j].hasOwnProperty("rate") && myObject[j].hasOwnProperty("description") && myObject[j].hasOwnProperty("name")){ 
 
    arr1 = myObject[j]["rate"]; 
 
    arr2 = myObject[j]["description"]; 
 
    arr3 = myObject[j]["name"]; 
 
    } 
 
    } 
 
} 
 

 
for(var k = 0; k < 2; k++){ 
 
     result.line_items.push({ 
 
     rate: arr1[k], 
 
     description: arr2[k], 
 
     name: arr3[k] 
 
    }) 
 
} 
 
console.log(result);

0
var data = { 
     "rate": ["10", "20"], 
     "description": ["desc 1", "desc 2"], 
     "name": ["name 1", "name 2"] 
     } 


    function lengthChecker(items){ 
     for(var i in items){ 
      return items[i].length; 
     } 
    } 

    function processFunc(items){ 
     var keys = Object.keys(items); 
     var arr = []; 
     var length = lengthChecker(items) 
     for(let i=0 ; i < length ; i++){ 
      let cell = {}; 
      for(var j in keys){ 
       let targetKeyName = keys[j]; 
       cell[targetKeyName] = items[targetKeyName][i]; 
      } 
      arr.push(cell); 
     } 

     return arr; 
    } 

    var processData = processFunc(data) 
    console.log('processData',processData) 
0

你可以遍歷所有屬性和數組,並建立與單一屬性的新陣列。

var data = { line_items: [{ rate: ["10", "20"], description: ["desc 1", "desc 2"], name: ["name 1", "name 2"] }] }, 
 
    result = { line_items: [] }; 
 

 
data.line_items.forEach(function (o) { 
 
    Object.keys(o).forEach(function (k) { 
 
     o[k].forEach(function (a, i) { 
 
      result.line_items[i] = result.line_items[i] || {}; 
 
      result.line_items[i][k] = a; 
 
     }); 
 
    }); 
 
}); 
 

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

版本與line_items多個項目。

var data = { line_items: [{ rate: ["10", "20"], description: ["desc 1", "desc 2"], name: ["name 1", "name 2"] }, { rate: ["30", "40"], description: ["desc 3", "desc 4"], name: ["name 3", "name 4"] }] }, 
 
    result = { line_items: [] }; 
 

 
data.line_items.forEach(function (o) { 
 
    Object.keys(o).forEach(function (k) { 
 
     o[k].forEach(function (a, i) { 
 
      result.line_items[this.count + i] = result.line_items[this.count + i] || {}; 
 
      result.line_items[this.count + i][k] = a; 
 
     }, this); 
 
     this.max = Math.max(this.max, o[k].length); 
 
    }, this); 
 
    this.count += this.max; 
 
    this.max = 0; 
 
}, { count: 0, max: 0 }); 
 

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

0

插入變量的問題你的對象在下面的代碼等等看。 line_items對象可以包含多個元素。不,你必須寫自己:

var question={ 
    "line_items": [ 
     { 
      "rate": ["10", "20","30"], 
      "description": ["desc 1", "desc 2","desc 3"], 
      "name": ["name 1", "name 2" ,"desc 3"] 
     } 
    ] 
}; 
var answer={"line_items":[]}; 
for(var i=0;i<question['line_items'].length;i++){ 
    for(var j=0;j<question['line_items'][i]['rate'].length;j++){ 
     var newObject={}; 
     newObject['rate']=question['line_items'][i]['rate'][j]; 
     newObject['description']=question['line_items'][i]['description'][j]; 
     newObject['name']=question['line_items'][i]['name'][j]; 
     answer["line_items"].push(newObject); 
    } 
}