我需要传输一些数据,该数据有太多键值对。 由于 key 相似,我不想将它们与每个对象一起传输。
假设我有以下数据:
[
{
x:11,
y:12
},{
x:21,
y:22
},{
x:31,
y:32
},{
x:41,
y:42
}
];
我需要最终输出为
[ [x,y],[[11,12],[21,22],[31,32],[41,42]] ]
或
[ [x,y],[11,12],[21,22],[31,32],[41,42] ]
在另一端,我应该能够转换回其原始形式。 如果它能够处理某些对象中的附加键
,那就太好了我想我已经看到了 lodash 或下划线函数与此接近/类似,但我现在无法找到它。
注意:我不知道 key 是什么
最佳答案
Lodash v4.17.1
修改原来的
var modifiedOriginal = _.chain(original)
.map(_.keys)
.flatten()
.uniq()
.thru(function(header){
return _.concat(
[header],
_.map(original, function(item) {
return _.chain(item)
.defaults(_.zipObject(
header,
_.times(_.size(header), _.constant(undefined))
))
.pick(header)
.values()
.value()
})
);
})
.value();
修改回原来的(按键顺序不是 保证)
var backToOriginal = _.map(_.tail(modified), function(item) {
return _.chain(_.head(modified))
.zipObject(item)
.transform(function(result, val, key) {
if (!_.isUndefined(val)) {
result[key] = val;
}
})
.value();
});
JSFiddle 代码 https://jsfiddle.net/wa8kaL5g/1/
关于javascript - lodash 将对象数组转换为单个键数组和多个值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40625147/