我想将一个对象转换为另一个结构。这是原始对象:
[{
"id": "2IJXhq",
"fields": [{
"key": "FirstName",
"value": "David"
}, {
"key": "LastName",
"value": "Smith"
}, {
"key": "Age",
"value": 30
}, {
"key": "Profession",
"value": "engineer"
}, {
"key": "DOB",
"value": "1990-03-11"
}, {
"key": "Gender",
"value": "male"
}]
}, {
"id": "5BTGyk",
"fields": [{
"key": "FirstName",
"value": "Robert"
}, {
"key": "LastName",
"value": "Conner"
}, {
"key": "Age",
"value": 40
}, {
"key": "Profession",
"value": "doctor"
}, {
"key": "DOB",
"value": "1960-04-22"
}, {
"key": "Gender",
"value": "male"
}]
}]
我想把它变成这样:
[{
"id": "2IJXhq",
"person": [{
"FirstName": "David",
"LastName": "Smith",
"Profession": "engineer",
"Age": 30,
"DOB": "1990-03-11",
"Gender": "male"
}]
}, {
"id": "5BTGyk",
"person": [{
"FirstName": "Robert",
"LastName": "Conner",
"Profession": "doctor",
"Age": 40,
"DOB": "1990-03-11",
"Gender": "male"
}]
}]
一些想法试图使用 Map, reduce 如下
let arr = [{"id":"2IJXhq","person":[{"FirstName":"David","LastName":"Smith","Profession":"engineer","Age":30,"DOB":"1990-03-11","Gender":"male"}]},{"id":"5BTGyk","person":[{"FirstName":"Robert","LastName":"Conner","Profession":"doctor","Age":40,"DOB":"1990-03-11","Gender":"male"}]}]
let o = arr.map(item => item.reduce((a, {key, Value}) => ({[key]: Value, ...a} ), {}))
console.log(o)
但这似乎不起作用。
上面的对象正在下面的简单 HTML 页面中使用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Concise Handlebars.js</title>
<link rel="stylesheet" href="style.css">
<script src="//code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.1.2/handlebars.min.js"></script>
</head>
<body>
<div id="anchor">People
</div>
<script id="tpl" type="text/template">
{{#each this}}
<div>
<a href="{{id}}">{{id}} </a>
{{#each fields}}
<p>
{{key}} : {{value}}
</p>
{{/each}}
</div>
{{/each}}
</script>
<script>
var slingshot = function (url, tplId, anchor) {
$.getJSON(url, function(data) {
console.log(data);
var template = $(tplId).html();
var stone = Handlebars.compile(template)(data);
$(anchor).append(stone);
});
}
slingshot('//api.jsonbin.io/b/5b7eca766376d24455aa55f8', '#tpl', '#anchor');
</script>
</body>
</html>