使用索引到变量创建多维数组

时间:2015-10-07 14:11:59

标签: javascript oop object multidimensional-array

我想这样做:

var array=new Array();

//I have an array
//[0]{category:'1',page:'2',row:'3',column:'4',description:'boh',id:'0'};
//[2]{category:'2',page:'2',row:'4',column:'4',description:'bah',id:'2'};

//for cycle for order the original object
object.forEach(function(obj){

问题在于:如何通过对象值设置此多维数组的索引?

    array[category][page][row][column] = obj;

}

//then with another cycle
for(var a=0;a<category.length;a++){
    for(var b=0;b<page.length;b++){
        console.log(array[a][b][c][d].description);
    }
}

3 个答案:

答案 0 :(得分:1)

you can create multi dimentional array bu this

var myarray=new Array(3)
for (i=0; i <3; i++)
    myarray[i]=new Array(5) 

答案 1 :(得分:0)

我修好了!

var FunzioniDB = function () {

this.elenco_prodotti = function (callBack) {
    var data = [];
    var testo_query = 'SELECT cat_varianti,colore_tasto,id,descrizione,prezzo_1, categoria, pagina, posizione FROM prodotti WHERE descrizione!="" AND prezzo_1 !="" AND posizione!="" AND pagina!="" AND categoria!="" ORDER BY posizione ASC,categoria ASC,pagina ASC ;';
    var prom = new Promise(function (resolve, reject) {

        comanda.sincro.query(testo_query, function (prodotto)
        {
            //DARE LA CONDIZIONE CHE ESISTA IL PRODOTTO
            resolve({prodotto: prodotto});
        });
    });
    data.push(prom);
    Promise.all(data).then(function (data) {

        /*data.forEach(function (oggetto) {});*/

        var array_prodotti = data[0].prodotto;
        //struttura oggetto
        //prodotto è l'oggetto principale
        var prodotti = new Array();
        array_prodotti.forEach(function (ar) {

            var split = ar['posizione'].split('-');
            //console.log(ar);

            var riga = split[0];
            var colonna = split[1];

            if (prodotti[ar.categoria] === undefined)
            {
                prodotti[ar.categoria] = new Array();
            }

            if (prodotti[ar.categoria][ar.pagina] === undefined)
            {
                prodotti[ar.categoria][ar.pagina] = new Array();
            }

            if (prodotti[ar.categoria][ar.pagina][riga] === undefined)
            {
                prodotti[ar.categoria][ar.pagina][riga] = new Array();
            }

            if (prodotti[ar.categoria][ar.pagina][riga][colonna] === undefined)
            {
                prodotti[ar.categoria][ar.pagina][riga][colonna] = new Object();
                prodotti[ar.categoria][ar.pagina][riga][colonna] = ar;
            }
        });

        var output = '';

        for (var a in prodotti) {
            for (var b in prodotti[a]) {
                for (var c = 1; c <= 6; c++) {
                    for (var d = 1; d <= 8; d++) {
                        //output += prodotti[a][b][c][d].descrizione + ',';
                        console.log(a + '-' + b + '-' + c + '-' + d);
                        if (prodotti[a][b] !== undefined && prodotti[a][b][c] !== undefined &&
                                prodotti[a][b][c][d] !== undefined)
                        {
                            console.log('prod.esist');
                            output += '*' + prodotti[a][b][c][d].descrizione;
                        }

                    }
                }
            }
        }

        callBack(output);
    });
};
};         });

答案 2 :(得分:0)

您可以执行以下操作(示例中为2维):

var multiArr = [];

yourInputArrOfObjects.forEach(obj => {
  if (!multiArr[parseInt(obj.category)]) {
    multiArr[parseInt(obj.category)]=[];
  }
  if (!multiArr[parseInt(obj.category)][parseInt(obj.page)]) {
    multiArr[parseInt(obj.category)][parseInt(obj.page)] = obj;
  }
});

这将允许您通过

访问第一个对象
multiArr[1][2];

请注意,这种方法可以满足您的需求,但会造成很多浪费。或数组或子数组中的空项:数组总是从0开始,所以如果你有例如只有第9页,而multiArr包含数字0-8的空(未定义)条目。

更好的方法是使用过滤器创建一个函数:

function giveMeObjectAtMultiIndex(indexObj) {
  var outArr = multiArr.filter(item => {
    return (item.category == indexObj.category && item.page == indexObj.page));
  }
  return outArr[0];
}

获取类别== 1和页面== 2的对象,你可以:

objSought = giveMeObjectAtMultiIndex({category: '1', page: '2'});