这是我的代码..
var result = data.map(function(item){
return {
category:item.category,
key:item.key,
value:item.value
}
});
console.log(result);
这是在控制台中打印出来的内容。
Array[4]
0: Object
category: "common"
key: "Food"
value: "food"
1: Object
category: "welcome"
key: "title"
value: "Welcome..."
2: Object
category: "welcome"
key: "app_description"
value: "In this App "
3: Object
category: "welcome"
key: "select_location"
value: "Select Location"
这就是我想要实现的目标
{
common:{
"Food" : "food"
},
welcome:{
title : Welcome...,
app_description : "In this App",
select_location : "Select Location"
}
}
这是我正在尝试的代码。但它不起作用..
return {
item.category:{
item.key:item.value;
}
任何人都可以帮我吗?我不想使用GSON或任何其他第三方JS。我怎样才能使用核心JS完成这项工作?
答案 0 :(得分:4)
首先,你想要的是一个对象,而不是一个数组。所以你不能使用只将一个数组映射到另一个数组的.map()
。
您需要 .reduce()
。
var result = data.reduce(function (result, item) {
// Create the object the first time it arrives
result[item.category] = result[item.category] || {};
// Add the field
result[item.category][item.key]=item.value;
// Return the resulting object
return result;
}, {});
console.log(result);
.reduce()
的缩减函数需要两个(另外两个可选)参数。 累积结果和当前项。返回的值是在其上处理当前项目之后的结果。
.reduce()
的第二个参数(第一个是缩减函数)是初始值,第一次迭代时该值将作为result
传递。< / p>
答案 1 :(得分:2)
var result = data.reduce(function (previousValue, currentValue) {
previousValue[currentValue.category] = previousValue[currentValue.category] || {};
previousValue[currentValue.category][currentValue.key] = currentValue.value;
return previousValue;
}, {});
答案 2 :(得分:2)
您也可以尝试:
var data = [
{
category: "common",
key: "Food",
value: "food"
},
{
category: "welcome",
key: "title",
value: "Welcome..."
},
{
category: "welcome",
key: "app_description",
value: "In this App "
},
{
category: "welcome",
key: "select_location",
value: "Select Location"
}
];
var obj = {};
for (var i in data) {
if(!obj[data[i].category]){
obj[data[i].category] = {};
}
obj[data[i].category][data[i].key] = data[i].value;
}
console.log(obj);