[英]angularjs, need to transform object properties
在我的angularjs應用程序中,我有一個模型,它是對象數組,如下所示:
$scope.originalData = [{
"id": 10000,
"transactionid": "gec43434",
"status": "COMPLETED",
"session_id": "TTYUU455667",
"errors": "1",
"start_timestamp": "2016-11-07 02:35:35",
"log_field": "Sample Text For Testing"
}, {
"id": 10001,
"transactionid": "r34fdfdf",
"status": "COMPLETED",
"session_id": "dfdfer3453df",
"errors": "3",
"start_timestamp": "2016-10-07 03:20:15",
"log_field": "Sample Text2 For Testing"
}];
現在,我需要修改對象的相同數組以顯示如下所示,除了log_field
其余所有屬性都應歸入同一對象的另一個屬性之下。
$scope.modifiedData = [{
"subItems": {
"id": 1000,
"transactionid": "gec43434",
"status": "COMPLETED",
"session_id": "TTYUU455667",
"errors": "1",
"start_timestamp": "2016-11-07 02:35:35"
},
"log_field": "Sample Text For Testing"
}, {
"subItems": {
"id": 10001,
"transactionid": "r34fdfdf",
"status": "COMPLETED",
"session_id": "dfdfer3453df",
"errors": "3",
"start_timestamp": "2016-10-07 03:20:15"
},
"log_field": "Sample Text2 For Testing"
}]
這是您可以做的。 使用Array.map並刪除。
var originalData = [{ "id": 10000, "transactionid": "gec43434", "status": "COMPLETED", "session_id": "TTYUU455667", "errors": "1", "start_timestamp": "2016-11-07 02:35:35", "log_field": "Sample Text For Testing" }, { "id": 10001, "transactionid": "r34fdfdf", "status": "COMPLETED", "session_id": "dfdfer3453df", "errors": "3", "start_timestamp": "2016-10-07 03:20:15", "log_field": "Sample Text2 For Testing" }]; var result = originalData.map((item) => { var log_field = item.log_field; delete item.log_field; return { "subItems": item, "log_field": log_field }; }); console.log(result);
萬一,如果您不應該修改原始數據,這是您可以做的。
var originalData = [{ "id": 10000, "transactionid": "gec43434", "status": "COMPLETED", "session_id": "TTYUU455667", "errors": "1", "start_timestamp": "2016-11-07 02:35:35", "log_field": "Sample Text For Testing" }, { "id": 10001, "transactionid": "r34fdfdf", "status": "COMPLETED", "session_id": "dfdfer3453df", "errors": "3", "start_timestamp": "2016-10-07 03:20:15", "log_field": "Sample Text2 For Testing" }]; var result = originalData.map((item) => { //Withou modifying original data. var resultItem = Object.assign({}, item), log_field = resultItem.log_field; delete resultItem.log_field; return { "subItems": resultItem, "log_field": log_field }; }); console.log(originalData); console.log(result);
似乎很簡單
const originalData = [{"id":10000,"transactionid":"gec43434","status":"COMPLETED","session_id":"TTYUU455667","errors":"1","start_timestamp":"2016-11-07 02:35:35","log_field":"Sample Text For Testing"},{"id":10001,"transactionid":"r34fdfdf","status":"COMPLETED","session_id":"dfdfer3453df","errors":"3","start_timestamp":"2016-10-07 03:20:15","log_field":"Sample Text2 For Testing"}] const doNotMap = 'log_field' const modifiedData = originalData.map(d => { let subKeys = Object.keys(d).filter(key => key !== doNotMap) return { subItems: subKeys.reduce((obj, key) => { return Object.assign(obj, { [key]: d[key] }) }, Object.create(null)), [doNotMap]: d[doNotMap] } }) console.info('Modified =', modifiedData) console.log('Original =', originalData)
所以這是ES2015之前的版本
var originalData = [{"id":10000,"transactionid":"gec43434","status":"COMPLETED","session_id":"TTYUU455667","errors":"1","start_timestamp":"2016-11-07 02:35:35","log_field":"Sample Text For Testing"},{"id":10001,"transactionid":"r34fdfdf","status":"COMPLETED","session_id":"dfdfer3453df","errors":"3","start_timestamp":"2016-10-07 03:20:15","log_field":"Sample Text2 For Testing"}] var doNotMap = 'log_field' var modifiedData = originalData.map(function(d) { var subKeys = Object.keys(d).filter(function(key) { return key !== doNotMap }) var modified = Object.create(null) modified.subItems = subKeys.reduce(function(obj, key) { var keyObj = Object.create(null) keyObj[key] = d[key] return Object.assign(obj, keyObj) }, Object.create(null)) modified[doNotMap] = d[doNotMap] return modified }) console.info('Modified =', modifiedData) console.log('Original =', originalData)
這是我的方法,它將添加所有字段,無論您的數據結構如何。 如果您的領域需要更改,這是“稍微”未來的證明。 除了log_field
之外,所有字段都將添加到subItems
log_field
。
var data = [
{
"id": 10000,
"transactionid": "gec43434",
"status": "COMPLETED",
"session_id": "TTYUU455667",
"errors": "1",
"start_timestamp": "2016-11-07 02:35:35",
"log_field": "Sample Text For Testing"
},
{
"id": 10001,
"transactionid": "r34fdfdf",
"status": "COMPLETED",
"session_id": "dfdfer3453df",
"errors": "3",
"start_timestamp": "2016-10-07 03:20:15",
"log_field": "Sample Text2 For Testing"
}
];
var newData = [];
data.forEach(function(object) {
// Create a new temporary object
var temp = {
subItems: {}
};
// Loop through the existing object
for (var key in object) {
// Leave the log field out of sub items
if (key === "log_field") temp[key] = object[key];
// Add all other keys/values to the subItems object
temp["subItems"][key] = object[key];
}
// Push the new object to the newData array
newData.push(temp);
});
console.log(newData);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.