Я не совсем уверен, что полностью следую за тобой, но ты имеешь в виду что-то подобное?
var data = [Object, Object, Object];
var artikelen = [];
for(var i=0; i<data.length; i++){
if( !artikelen[data[i].category])
artikelen[data[i].category] = new Array();
if( !artikelen[data[i].category][data[i].type] )
artikelen[data[i].category][data[i].type] = new Array();
artikelen[data[i].category][data[i].type].push(data[i]);
}
Более полный пример: (также учтите, что я ставлю категорию вместо категории, меняйте при необходимости).
<script language="javascript" type="text/javascript">
var obj1 = new Object();
obj1.category = 1;
obj1.type = 2;
obj1.id = 1;
var obj2 = new Object();
obj2.category = 1;
obj2.type = 2;
obj2.id = 2;
var obj3 = new Object();
obj3.category = 2;
obj3.type = 4;
obj3.id = 3;
// Array containing all the objects from the server
// looks like this
var data = [obj1, obj2, obj3];
var artikelen = [];
for(var i=0; i<data.length; i++){
if( !artikelen[data[i].category])
artikelen[data[i].category] = new Array();
if( !artikelen[data[i].category][data[i].type] )
artikelen[data[i].category][data[i].type] = new Array();
artikelen[data[i].category][data[i].type].push(data[i]);
}
alert( artikelen[1][2] ); // expected [object], [object]
alert( artikelen[1][2][0].type ); // expected 2
</script>
Ключевые вещи, которые следует отнять у этого подхода:
- Проверьте, существует ли массив в ключе
- Если нет, создайте его
.push
может использоваться в массиве javascript для добавления элемента в массив
Использование строки в качестве типа для объекта:
var obj1 = new Object();
obj1.category = 1;
obj1.type = "hello hello";
obj1.id = 1;
var obj2 = new Object();
obj2.category = 1;
obj2.type = 2;
obj2.id = 2;
var obj3 = new Object();
obj3.category = 2;
obj3.type = 4;
obj3.id = 3;
// Array containing all the objects from the server
// looks like this
var data = [obj1, obj2, obj3];
var artikelen = [];
for(var i=0; i<data.length; i++){
if( !artikelen[data[i].category])
artikelen[data[i].category] = new Array();
if( !artikelen[data[i].category][data[i].type] )
artikelen[data[i].category][data[i].type] = new Array();
artikelen[data[i].category][data[i].type].push(data[i]);
}
alert( artikelen[1][2] ); // expected [object], [object]
alert( artikelen[1]["hello hello"][0].type ); // expected "hello hello"
EDIT
Я дал еще немного, подумал, и после прочтения this выясняется, что arrays
в Javascript не очень подходят для использования в качестве ассоциативных массивов (как в PHP),В действительности вы просто добавляете атрибуты к объекту.Так что вместо этого лучше сделать object
.Например, следующее:
var obj1 = new Object();
obj1.category = 1;
obj1.type = "hello hello";
obj1.id = 1;
var obj2 = new Object();
obj2.category = 1;
obj2.type = 2;
obj2.id = 2;
var obj3 = new Object();
obj3.category = 2;
obj3.type = 4;
obj3.id = 3;
// Array containing all the objects from the server
// looks like this
var data = [obj1, obj2, obj3];
var artikelen = [];
for(var i=0; i<data.length; i++){
if( !artikelen[data[i].category])
artikelen[data[i].category] = new Object();
if( !artikelen[data[i].category][data[i].type] )
artikelen[data[i].category][data[i].type] = new Object();
artikelen[data[i].category][data[i].type] = (data[i]);
}
console.dir( artikelen ); // if using a debugger with console, gives detailed info
Также, если вы используете отладчик, такой как Firebug в Firefox, вы можете просмотреть подробную информацию с помощью функции console.dir
.