Javascript数组转换
Javascript Array conversion
我想知道如何才能扭转这个局面:
var data = [
{id:1,option1:'short',option2:'red',option3:'gold'},
{id:2,option1:'short',option2:'red',option3:'silver'},
{id:3,option1:'short',option2:'blue',option3:'gold'},
{id:4,option1:'short',option2:'blue',option3:'silver'},
{id:5,option1:'long',option2:'red',option3:'gold'},
{id:6,option1:'long',option2:'red',option3:'silver'},
{id:7,option1:'long',option2:'blue',option3:'gold'},
{id:8,option1:'long',option2:'blue',option3:'silver'}]
使用Jquery转换成如下格式
var new_data = {
short:{
red:{gold:1,silver:2},
blue:{gold:3,silver:4}
},
long:{
red:{gold:5,silver:6},
blue:{gold:7,silver:8}
}
}
这比你想象的要容易。试试这个:
function helper(obj,tree,value) {
for( var i=0, l=tree.length; i<l-1; i++) {
obj[tree[i]] = obj[tree[i]] || {};
obj = obj[tree[i]];
}
obj[tree[i]] = value;
}
var new_data = {}, l = data.length, i;
for( i=0; i<l; i++) {
helper(new_data,[data[i].option1,data[i].option2,data[i].option3],data[i].id);
}
这个普通的JS将会这样做:
var data = […];
var new_data = {};
for (var i=0; i<data.length; i++) {
var o = new_data;
for (var j=1; j<3; j++) {
var prop = data[i]["option"+j];
o = o[prop] || (o[prop] = {});
}
o[data[i]["option"+j]] = data[i].id;
}
但是首先使用嵌套模式看起来更容易吗?
您可以这样使用.reduce()
:
var new_data = data.reduce(function(res, obj) {
if (!res[obj.option1])
res[obj.option1] = {};
if (!res[obj.option1][obj.option2])
res[obj.option1][obj.option2] = {};
res[obj.option1][obj.option2][obj.option3] = obj.id;
return res;
}, {});
或者像这样:
var new_data = data.reduce(function(res, obj) {
var o = res;
for (var i = 1; i < 3; i++)
o = (o[obj["option" + i]] = o[obj["option" + i]] || {});
o[obj.option3] = obj.id;
return res;
}, {});
相关文章:
- Javascript转换数组
- JSON.stringify不转换数组
- 使用underscore.js转换数组
- 对象转换数组
- 在 JavaScript 中的值列表中转换数组
- 转换数组并反转
- 用一个巨大的字符串“”转换数组;数字”;,用逗号分隔成一个数字数组(而不是字符串)
- 用javascript转换数组中的日期
- 如何转换数组字符串
- 转换数组中的输入值
- 如何在创建数组后转换数组中的var
- Json转换数组是一个字符串
- 在AngularJS中转换数组属性
- 在javascript中转换数组
- 动态转换数组为树状结构
- 使用Javascript和Underscore.js转换数组对象
- node.js中使用node-gyp的转换数组
- Nodejs -转换数组
- D3 js转换数组的矩形不工作
- 在Javascript中转换数组的数字到字符串