javascript中关联键和数字的数组组合
简言之,我要开始我的问题 我只是读取json文件javascript中关联键和数字的数组组合,javascript,jquery,arrays,json,multidimensional-array,Javascript,Jquery,Arrays,Json,Multidimensional Array,简言之,我要开始我的问题 我只是读取json文件 [{"FirstCategory":"Bath","SecondCategory":"Bath Accessories","ThirdCategory":""}, {"FirstCategory":"Bath","SecondCategory":"Faucets","ThirdCategory":""},{"FirstCategory":"Bath","SecondCategory":"Fixtures","ThirdCategory":""}
[{"FirstCategory":"Bath","SecondCategory":"Bath Accessories","ThirdCategory":""}, {"FirstCategory":"Bath","SecondCategory":"Faucets","ThirdCategory":""},{"FirstCategory":"Bath","SecondCategory":"Fixtures","ThirdCategory":""},{"FirstCategory":"Bath","SecondCategory":"Vanities","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Concrete","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Fencing","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Gypsum","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Insulation","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Insulssdation","ThirdCategory":""}]
并尝试转换为类似数组的
Array
(
[Bath] => Array
(
[Bath Accessories] => Array
(
[0] => test
)
[Faucets] => Array
(
[0] => test1
[1] => test2
)
)
)//sorry i have used PHP for simple formatting the array.
我花了很多时间在这件事上我不能成功请帮帮我
My javascript code : (not working.)
var FirstCategory = [];
var SecondCategory = [];
var ThirdCategory = [];
$.getJSON('tree.json', function(data) {
var dataObj = new Array();
$.each(data,function(i){
dataObj[data[i].FirstCategory] = new Array();
if([data[i].SecondCategory] in dataObj[data[i].FirstCategory])
dataObj[data[i].FirstCategory][data[i].SecondCategory] = data[i].SecondCategory;
else
dataObj[data[i].FirstCategory][data[i].SecondCategory] = new Array();
dataObj[data[i].FirstCategory][data[i].SecondCategory][data[i].ThirdCategory] = new Array();
});
console.log(dataObj);
/*
$.each(data,function(i){
if (FirstCategory == '') {
FirstCategory.push(data[i].FirstCategory);
}
else
{
if(!FirstCategory.contains(data[i].FirstCategory))
{
//root
FirstCategory.push(data[i].FirstCategory);
}
else
{
//------- second level category -------//
if (SecondCategory == '') {
SecondCategory.push(data[i].SecondCategory);
}
else
{
if(!SecondCategory.contains(data[i].SecondCategory))
{
SecondCategory.push(data[i].SecondCategory);
}
else
{
ThirdCategory.push(data[i].ThirdCategory);
}
}
}
}
});
*/
});
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] == obj) {
return true;
}
}
return false;
}
提前谢谢。请注意
从编程的角度来说:
var levels = ["FirstCategory", "SecondCategory", "ThirdCategory"]; // possibly more
var dataObj = {}; // an empty object
for (var i=0; i<data.length; i++) {
var cur = dataObj;
for (var j=0; j<levels.length; j++) {
var key = data[i][levels[j]];
if (!key) // empty
break;
if (key in cur)
cur = cur[key];
else
cur = cur[key] = {};
}
}
请告诉我
从编程的角度来说:
var levels = ["FirstCategory", "SecondCategory", "ThirdCategory"]; // possibly more
var dataObj = {}; // an empty object
for (var i=0; i<data.length; i++) {
var cur = dataObj;
for (var j=0; j<levels.length; j++) {
var key = data[i][levels[j]];
if (!key) // empty
break;
if (key in cur)
cur = cur[key];
else
cur = cur[key] = {};
}
}
这可能会起作用:
input = [{"FirstCategory":"Bath","SecondCategory":"Bath Accessories","ThirdCategory":""}, {"FirstCategory":"Bath","SecondCategory":"Faucets","ThirdCategory":""},{"FirstCategory":"Bath","SecondCategory":"Fixtures","ThirdCategory":""},{"FirstCategory":"Bath","SecondCategory":"Vanities","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Concrete","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Fencing","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Gypsum","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Insulation","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Insulssdation","ThirdCategory":""}];
function reducer (prev, val) {
v1 = val["FirstCategory"]
v2 = val["SecondCategory"]
if (!(v1 in prev)) { prev[v1] = {}; }
if (!(v2 in prev[v1])) { prev[v1][v2] = [];}
prev[v1][v2].push(val["ThirdCategory"]);
return prev;
}
output = input.reduce(reducer, {});
console.log(input);
console.log(output);
输出:
{ Bath:
{ 'Bath Accessories': [ '' ],
Faucets: [ '' ],
Fixtures: [ '' ],
Vanities: [ '' ] },
'Building Materials':
{ Concrete: [ '' ],
Fencing: [ '' ],
Gypsum: [ '' ],
Insulation: [ '' ],
Insulssdation: [ '' ] } }
这可能会起作用:
input = [{"FirstCategory":"Bath","SecondCategory":"Bath Accessories","ThirdCategory":""}, {"FirstCategory":"Bath","SecondCategory":"Faucets","ThirdCategory":""},{"FirstCategory":"Bath","SecondCategory":"Fixtures","ThirdCategory":""},{"FirstCategory":"Bath","SecondCategory":"Vanities","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Concrete","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Fencing","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Gypsum","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Insulation","ThirdCategory":""},{"FirstCategory":"Building Materials","SecondCategory":"Insulssdation","ThirdCategory":""}];
function reducer (prev, val) {
v1 = val["FirstCategory"]
v2 = val["SecondCategory"]
if (!(v1 in prev)) { prev[v1] = {}; }
if (!(v2 in prev[v1])) { prev[v1][v2] = [];}
prev[v1][v2].push(val["ThirdCategory"]);
return prev;
}
output = input.reduce(reducer, {});
console.log(input);
console.log(output);
输出:
{ Bath:
{ 'Bath Accessories': [ '' ],
Faucets: [ '' ],
Fixtures: [ '' ],
Vanities: [ '' ] },
'Building Materials':
{ Concrete: [ '' ],
Fencing: [ '' ],
Gypsum: [ '' ],
Insulation: [ '' ],
Insulssdation: [ '' ] } }
试试这个:
var formattedData = {};
$.each(data, function(i, item) {
if(!formattedData[item.FirstCategory]) {
formattedData[item.FirstCategory] = {};
}
if(!formattedData[item.FirstCategory][item.SecondCategory]) {
formattedData[item.FirstCategory][item.SecondCategory] = [];
}
formattedData[item.FirstCategory][item.SecondCategory].push(item.ThirdCategory);
});
生成的对象将具有以下结构:
var formattedData = {
'Bath': {
'Bath Accessories': [
'Non-slip Bath Mat'
],
'Faucets': [
'Brass Fawcet (Pair)',
'Chrome Fawcet (Pair)',
'Gold Fawcet (Monoblock)'
],
'Fixtures': [
'xxx',
'yyy',
'zzz'
],
//etc.
//etc.
}
};
试试这个:
var formattedData = {};
$.each(data, function(i, item) {
if(!formattedData[item.FirstCategory]) {
formattedData[item.FirstCategory] = {};
}
if(!formattedData[item.FirstCategory][item.SecondCategory]) {
formattedData[item.FirstCategory][item.SecondCategory] = [];
}
formattedData[item.FirstCategory][item.SecondCategory].push(item.ThirdCategory);
});
生成的对象将具有以下结构:
var formattedData = {
'Bath': {
'Bath Accessories': [
'Non-slip Bath Mat'
],
'Faucets': [
'Brass Fawcet (Pair)',
'Chrome Fawcet (Pair)',
'Gold Fawcet (Monoblock)'
],
'Fixtures': [
'xxx',
'yyy',
'zzz'
],
//etc.
//etc.
}
};
您的json不在该表单上有什么原因吗?如果不是的话,我建议改为更改后端。首先你应该意识到,在JavaScript中,你所做的是一个普通对象,而不是数组。你从哪里得到这些
test
,test1
,test2
值的?你的json不在表单上有什么原因吗?如果不是,我建议改为更改后端。首先,你应该意识到在JavaScript中,你所做的是一个普通对象,而不是数组。你从哪里得到这些test
,test1
,test2
值的?非常好的解决方案。。。。但是要小心Array.reduce()
是对ECMAScript 5的添加。最新的Chrome、FF、Opera、Safari和IE9都可以,但IE6/7/8需要解决方案脚本。阅读所有关于它的@RudolfMühlbauer:Thanxs dude:)非常好的解决方案。。。。但是要小心Array.reduce()
是对ECMAScript 5的添加。最新的Chrome、FF、Opera、Safari和IE9都可以,但IE6/7/8需要解决方案脚本。阅读所有关于它的内容@RudolfMühlbauer:Thanxs dude:)