![](/img/trans.png)
[英]Javascript: Transform array of object response via lodash or underscore or corejavascript
[英]Javascript object transform with lodash or underscore
我有一個結構很多的對象:
[{
n_vId: 1,
s_vName: 'test',
d_date: '2016-03-15 00:00:00'
f_a: 0,
f_b: 0,
f_c: 0,
f_d: 4,
f_e: 0,
f_f: 0.1,
f_g: 0
},
{
n_vId: 2,
s_vName: 'test',
d_date: '2016-03-15 00:15:00'
f_a: 1,
f_b: 1,
f_c: 0,
f_d: 4,
f_e: 0,
f_f: 0.1,
f_g: 0
}]
我想將此對象轉換為
a = [
{
date: '2016-03-15 00:00:00',
a: 0
},
{
date: '2016-03-15 00:15:00',
a: 1
}
]
b = [
{
date: '2016-03-15 00:00:00',
b: 0
},
{
date: '2016-03-15 00:15:00',
b: 1
}
]
...
我可以改變它。 但我認為我的過程是如此復雜。 所以,您能建議我正確的程序嗎? 現在我使用lodash,但可以使用下划線或其他js模塊。
您可以簡單地使用map:
a = data.map(function(i) {
return {date: i.d_date, a: i.f_a};
});
b = data.map(function(i) {
return {date: i.d_date, b: i.f_b};
});
對我來說似乎很簡單。
看看這個npm模塊https://github.com/gabesoft/trans
var trans = require('trans');
var results = trans(data)
.mapff('d_date', 'date')
.mapff('f_a', 'a')
.pick('date', 'a')
.value();
正如其他人所說,您不需要Lodash或Underscore,因為這只是map()
操作,但是您可以根據需要使用這些庫中的_.map()
函數。
var objs = [{ n_vId: 1, s_vName: 'test', d_date: '2016-03-15 00:00:00', f_a: 0, f_b: 0, f_c: 0, f_d: 4, f_e: 0, f_f: 0.1, f_g: 0 }, { n_vId: 2, s_vName: 'test', d_date: '2016-03-15 00:15:00', f_a: 1, f_b: 1, f_c: 0, f_d: 4, f_e: 0, f_f: 0.1, f_g: 0 }]; function transform(letter) { return _.map(objs, function (obj) { var out = { date: obj.d_date }; out[letter] = obj['f_' + letter]; return out; }); } var a = transform('a'), b = transform('b'); // etc. document.getElementById('out').textContent = JSON.stringify({a: a, b: b}, true, '\\t');
<script src="https://cdn.jsdelivr.net/lodash/4.6.1/lodash.min.js"></script> <pre id="out"></pre>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.