Javascript 使用 lodash 或下划线的对象转换
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 模块。
看看这个 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();
你可以简单地使用地图:
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};
});
我觉得很简单。
正如其他人所说,您不需要 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>
我有很多对象,其结构为:
[{
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 模块。
看看这个 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();
你可以简单地使用地图:
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};
});
我觉得很简单。
正如其他人所说,您不需要 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>