我有一系列参数如下:
[param1, param2_experience, param3]
我有另一个这样的对象数组:
[
{
id: 123,
param1_issue: "some",
param1_star: 5,
param2_experience_time_taken: "45 minutes",
param3_issue_other: "some other"
},
{
id: 456,
param1_issue: "some issue",
param1_star: 3.5,
param3_issue_other: "some other issue"
}
]
我想在第一个数组上填充此数组。像这样的东西:
[
{
id: 123,
param1: {
issue: "some",
star: 5
},
param2_experience: {
time_taken: "45 minutes"
},
param3: {
issue_other: "some other"
}
},
{
id: 456,
param1: {
issue: "some issue",
star: 3.5
},
param3: {
issue_other: "some other issue"
}
}
]
什么是更好的方法呢?该数组可包含数千个对象。
答案 0 :(得分:1)
您可以map
将数组中的每个元素转换为具有第一个数组格式的新对象。
var keys = ["param1", "param2_experience", "param3"];
var data = [{"id":123,"param1_issue":"some","param1_star":5,"param2_experience_time_taken":"45 minutes","param3_issue_other":"some other"},{"id":456,"param1_issue":"some issue","param1_star":3.5,"param3_issue_other":"some other issue"}];
var output = _.map(data, e => {
var obj = {};
_.forIn(e, (val, key) => {
var bucket = _.find(keys, k => _.startsWith(key, k));
_.set(obj,
bucket
? [bucket, key.slice(bucket.length + 1)]
: key,
val);
});
return obj;
});
console.log(output);
<script src="https://cdn.jsdelivr.net/lodash/4.14.1/lodash.min.js"></script>
答案 1 :(得分:1)
我想你可以这样做;
StringToRayonTransformer
&#13;
答案 2 :(得分:1)
您可以使用lodash#map和lodash#reduce来迭代集合和每个集合的项目,而lodash#set则返回集合中新转换的对象。这里的关键点是使用String.prototype.replace替换键的第一个int32
。
_
var result = _.map(data, function(item) {
return _.reduce(item, function(result, value, key) {
return _.set(result, key.replace('_', '.'), value);
}, {});
});
&#13;
var data = [
{
id: 123,
param1_issue: "some",
param1_star: 5,
param2_experience_time_taken: "45 minutes",
param3_issue_other: "some other"
},
{
id: 456,
param1_issue: "some issue",
param1_star: 3.5,
param3_issue_other: "some other issue"
}
];
var result = _.map(data, function(item) {
return _.reduce(item, function(result, value, key) {
return _.set(result, key.replace('_', '.'), value);
}, {});
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;