2016-11-25 25 views
2

別々のオブジェクトに配列してJSONオブジェクトを分割する方法:Iは、以下の形式で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

をそれぞれ使用してすべてのプロパティを取得し、次にいずれかのプロパティを反復処理して配列のオブジェクトを作成します –

答えて

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

あなたはすべてのプロパティと配列を反復処理し、単一のプロパティを持つ新しい配列を構築することができます。 line_itemsでより多くのアイテムを持つ

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; }

バージョン。

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); 
    } 
} 
関連する問題