如何将键值对象数组转换为具有单个属性的对象数组?
How to convert array of key–value objects to array of objects with a single property?
我有一个这样的对象数组:
[
{ "key": "fruit", "value": "apple" },
{ "key": "color", "value": "red" },
{ "key": "location", "value": "garden" }
]
我需要将其转换为以下格式:
[
{ "fruit": "apple" },
{ "color": "red" },
{ "location": "garden" }
]
如何使用 JavaScript 完成此操作?
您可以使用.map
var data = [
{"key":"fruit","value":"apple"},
{"key":"color","value":"red"},
{"key":"location","value":"garden"}
];
var result = data.map(function (e) {
var element = {};
element[e.key] = e.value;
return element;
});
console.log(result);
如果你使用ES2015
你也可以这样做
var result = data.map((e) => {
return {[e.key]: e.value};
});
使用箭头函数,数据名为arr
arr.map(e => {
var o = {};
o[e.key] = e.value;
return o;
});
这会生成一个新的数组并且不会修改原来的
可以简化为一行
arr.map(e => ({[e.key]: e.value}));
如果你还不能假设箭头函数支持,你会写这个手写
arr.map(function (e) {
var o = {};
o[e.key] = e.value;
return o;
});
使用地图(如其他答案中所建议的那样)或以下将执行您想要的...
var data = [{"key":"fruit","value":"apple"},{"key":"color","value":"red"},{"key":"location","value":"garden"}];
var obj = {};
for(var i = 0; i < data.length; i++) {
obj[data[i]["key"]] = data[i]["value"];
}
您当前拥有的是一个对象数组,每个对象都有两个属性,键和值。如果您不知道 map,您可以随时 运行 在此数组上执行 forEach 循环并重新排列数据。试试下面的方法:
function() {
var newArray = [];
oldArray.forEach(function(x){
var obj= {};
obj[x.key] = x.value;
newArray.push(obj);
});
console.log(newArray);
}
这里的oldArray是你的原始数据
在 Javascript、obj.property 和 obj['property'] return 中相同。
obj['property'] 更灵活,因为键 'property' 可以是带有一些 space 的字符串:
obj['pro per ty'] // work
obj.pro per ty // not work
或
var a = 'property';
obj.a == obj.property // => false
obj[a] == obj.property // => true
所以你可以试试。
var data = [{"key":"fruit","value":"apple"},{"key":"color","value":"red"},{"key":"location","value":"garden"}]
var new_data = [];
var data_length = data.length; // just a little optimisation for-loop
for (var i = 0; i < data_length; i++) {
var item = data[i]; // to have a vision close of foreach-loop (foreach item of collection)
new_data[i] = {};
new_data[i][item.key] = item.value;
}
console.log(new_data);
// [{"fruit":"apple"},{"color":"red"},{"location":"garden"}]
我有一个这样的对象数组:
[
{ "key": "fruit", "value": "apple" },
{ "key": "color", "value": "red" },
{ "key": "location", "value": "garden" }
]
我需要将其转换为以下格式:
[
{ "fruit": "apple" },
{ "color": "red" },
{ "location": "garden" }
]
如何使用 JavaScript 完成此操作?
您可以使用.map
var data = [
{"key":"fruit","value":"apple"},
{"key":"color","value":"red"},
{"key":"location","value":"garden"}
];
var result = data.map(function (e) {
var element = {};
element[e.key] = e.value;
return element;
});
console.log(result);
如果你使用ES2015
你也可以这样做
var result = data.map((e) => {
return {[e.key]: e.value};
});
使用箭头函数,数据名为arr
arr.map(e => {
var o = {};
o[e.key] = e.value;
return o;
});
这会生成一个新的数组并且不会修改原来的
可以简化为一行
arr.map(e => ({[e.key]: e.value}));
如果你还不能假设箭头函数支持,你会写这个手写
arr.map(function (e) {
var o = {};
o[e.key] = e.value;
return o;
});
使用地图(如其他答案中所建议的那样)或以下将执行您想要的...
var data = [{"key":"fruit","value":"apple"},{"key":"color","value":"red"},{"key":"location","value":"garden"}];
var obj = {};
for(var i = 0; i < data.length; i++) {
obj[data[i]["key"]] = data[i]["value"];
}
您当前拥有的是一个对象数组,每个对象都有两个属性,键和值。如果您不知道 map,您可以随时 运行 在此数组上执行 forEach 循环并重新排列数据。试试下面的方法:
function() {
var newArray = [];
oldArray.forEach(function(x){
var obj= {};
obj[x.key] = x.value;
newArray.push(obj);
});
console.log(newArray);
}
这里的oldArray是你的原始数据
在 Javascript、obj.property 和 obj['property'] return 中相同。 obj['property'] 更灵活,因为键 'property' 可以是带有一些 space 的字符串:
obj['pro per ty'] // work
obj.pro per ty // not work
或
var a = 'property';
obj.a == obj.property // => false
obj[a] == obj.property // => true
所以你可以试试。
var data = [{"key":"fruit","value":"apple"},{"key":"color","value":"red"},{"key":"location","value":"garden"}]
var new_data = [];
var data_length = data.length; // just a little optimisation for-loop
for (var i = 0; i < data_length; i++) {
var item = data[i]; // to have a vision close of foreach-loop (foreach item of collection)
new_data[i] = {};
new_data[i][item.key] = item.value;
}
console.log(new_data);
// [{"fruit":"apple"},{"color":"red"},{"location":"garden"}]