最近學習Vue.js發現其為了實現對data內的數組和對象進行雙向綁定,將數組和對象進行了封裝。
如下的對象
todos: [
{
id: 1,
title: 'Do the dishes',
},
{
id: 2,
title: 'Take out the trash',
},
{
id: 3,
title: 'Mow the lawn'
}
]
會被封裝成:
而封裝后的這個對象傳遞到后台會出現無法識別的現象。
於是,我開始嘗試將Vue.js封裝后的對象進行封裝。
var restore = function (vueObject) { var result = null; var type = Object.prototype.toString.call(vueObject); switch (type) { case '[object Array]': result = toArray(vueObject); break; case '[object Object]': result = toObject(vueObject); break; default: result = vueObject; break; } function toArray(vueArray) { var array = []; for (var index in vueArray) { var item = restore(vueArray[index]); array.push(item); } return array; } function toObject(vueObject) { var obj = new Object(); for (var index in vueObject) { var item = restore(vueObject[index]); obj[index] = item; } return obj; } return result; };
測試用例:
var json = { a: [ { a1: { a11: [1, 2, 3], a12: [1, 2, 3] }, a2: [{ a21: '21' }] }, { a3: { a31: [1, 2, 3], a32: [1, 2, 3] }, a4: [{ a41: '41' }] } ], b: { b1: 'b1', b2: 2 } };
Vue.js對象:
轉換后的結果:
{"a":[{"a1":{"a11":[1,2,3],"a12":[1,2,3]},"a2":[{"a21":"21"}]},{"a3":{"a31":[1,2,3],"a32":[1,2,3]},"a4":[{"a41":"41"}]}],"b":{"b1":"b1","b2":2}}