2016-09-27 7 views
0

私は別のオブジェクトに変換したいJavaScriptファイルに結果を取得しています。jQueryを使用してオブジェクトを別のオブジェクトに変換

私のオリジナルの結果

[ 
    { 
    "SName": "Set1", 
    "Elements": [ 
     { 
     "Id": "3", 
     "Name": "Name1" 
     }, 
     { 
     "Id": "5", 
     "Name": "Name2" 
     } 
    ] 
    }, 
    { 
    "SName": "Set2", 
    "Elements": [ 
     { 
     "Id": "7", 
     "Name": "Name3" 
     }, 
     { 
     "Id": "8", 
     "Name": "Name4" 
     } 
    ] 
    } 
] 

これはjQueryのまたはJavaScriptを使用してオブジェクトの配列に見えるように変換します。どうすればこれを達成できますか?

[ 
    { 
    "SName": "Set1", 
    "Id": 3, 
    "Name": "Name1" 
    }, 
    { 
    "SName": "Set1", 
    "Id": 5, 
    "Name": "Name2" 
    }, 
    { 
    "SName": "Set2", 
    "Id": 7, 
    "Name": "Name3" 
    }, 
    { 
    "SName": "Set2", 
    "Id": 8, 
    "Name": "Name4" 
    } 
] 
+0

値をループして再調整するだけです。 jQueryを使う必要はありません。 – modernator

答えて

1
var data =  [ 
    { 
    "SName": "Set1", 
    "Elements": [ 
     { 
     "Id": "3", 
     "Name": "Name1" 
     }, 
     { 
     "Id": "5", 
     "Name": "Name2" 
     } 
    ] 
    }, 
    { 
    "SName": "Set2", 
    "Elements": [ 
     { 
     "Id": "7", 
     "Name": "Name3" 
     }, 
     { 
     "Id": "8", 
     "Name": "Name4" 
     } 
    ] 
    } 
]; 
console.log(data); 

var newData = data.reduce(function (newArray, currentSet) { 
    return newArray.concat(currentSet.Elements.map(function (element) { 
     return Object.assign({ SName: currentSet.SName }, element); 
    })); 
}, []); 

console.log(newData); 

ここで重要なのは、reduce機能です。私たちがやっていることは、外側の配列の各値をループすることによって、新しい配列を作成することです。私たちは連続的にconcatを内部配列からマップした値で新しい配列に展開します。ここで

+0

ちょうど情報です。 IEをサポートするには、Object.assignではなく.extendを使用します。 – PSR

1

あなたは、配列、Elementsおよびプロパティを反復処理し、新しいオブジェクトを構築し、結果セットにプッシュできます。

var array = [{ "SName": "Set1", "Elements": [{ "Id": "3", "Name": "Name1" }, { "Id": "5", "Name": "Name2" }] }, { "SName": "Set2", "Elements": [{ "Id": "7", "Name": "Name3" }, { "Id": "8", "Name": "Name4" }] }], 
 
    result = []; 
 

 
array.forEach(function (a) { 
 
    a.Elements.forEach(function (b) { 
 
     var o = { SName: a.SName }; 
 
     Object.keys(b).forEach(function (k) { 
 
      o[k] = b[k]; 
 
     }); 
 
     result.push(o); 
 
    }); 
 
}); 
 

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

ES6

var array = [{ "SName": "Set1", "Elements": [{ "Id": "3", "Name": "Name1" }, { "Id": "5", "Name": "Name2" }] }, { "SName": "Set2", "Elements": [{ "Id": "7", "Name": "Name3" }, { "Id": "8", "Name": "Name4" }] }], 
 
    result = []; 
 

 
array.forEach(a => a.Elements.forEach(b => result.push(Object.assign({ SName: a.SName }, b)))); 
 

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

+0

ちょうど情報です。 IEをサポートするには、Object.assignではなく.extendを使用します。 – PSR

+0

'$'はjqueryの一部ですね。 –

+0

はい。それはjqueryの一部です。 – PSR

1

あなたはreduce()forEach()Object.assign()

でこれを行うことができます210

var data = [{ 
 
    "SName": "Set1", 
 
    "Elements": [{ 
 
    "Id": "3", 
 
    "Name": "Name1" 
 
    }, { 
 
    "Id": "5", 
 
    "Name": "Name2" 
 
    }] 
 
}, { 
 
    "SName": "Set2", 
 
    "Elements": [{ 
 
    "Id": "7", 
 
    "Name": "Name3" 
 
    }, { 
 
    "Id": "8", 
 
    "Name": "Name4" 
 
    }] 
 
}] 
 

 
var result = data.reduce(function(r, e) { 
 
    e.Elements.forEach(function(o) { 
 
    r.push(Object.assign({SName: e.SName}, o)) 
 
    }) 
 
    return r; 
 
}, []) 
 

 
console.log(result)

+0

ちょうど情報です。 IEをサポートするには、Object.assignではなく.extendを使用します。 – PSR

0

はjQueryのを使用したソリューションである、ここにjsfiddleです:

https://jsfiddle.net/noitse/3uk9qjnf/

私は、固定さんする問題で文句を言わないので、あなたはすべてのキーの名前を知っている願っています。ここで

var json = [ 
    { 
    "SName": "Set1", 
    "Elements": [ 
     { 
     "Id": "3", 
     "Name": "Name1" 
     }, 
     { 
     "Id": "5", 
     "Name": "Name2" 
     } 
    ] 
    }, 
    { 
    "SName": "Set2", 
    "Elements": [ 
     { 
     "Id": "7", 
     "Name": "Name3" 
     }, 
     { 
     "Id": "8", 
     "Name": "Name4" 
     } 
    ] 
    } 
] 

var newJSON = [] 

$(json).each(function(index,value){ 

    $(value.Elements).each(function(index1,value1){ 
     newJSON.push({"SName":value.SName,"Id":value1.Id,"Name":value1.Name}) 
}) 

}) 

alert(JSON.stringify(newJSON)) 

あなたが作成することができます$ .extend方法を、使用することができ、それは新しい配列

0

にそれをプッシュし、それが最初のJSONをループしないものを、その要素をループし、コードであります別のオブジェクトとマージしながら、オブジェクトのコピー。

var source = [] // Replace with the initalization of your source array 
var destination = []; 

for (var i = 0; i < source.length; i++) { 
    var node = source[i]; 
    for (var j = 0; j < node.Elements.length; j++) { 
     var subNode = node.Elements[j]; 
     newNode = $.extend(subNode, node); 
     delete newNode["Elements"]; 
     destination.push(newNode); 
    } 
} 

コードin this fiddleを実行できます。

関連する問題