2013-01-01 48 views
2

我創建一個JSONArray使用JavaScript,和一些奇怪的事情發生在我的新的磁盤陣列之後出現額外的數字:JSONArray創建

var arrayfinal = new Array(); 

//Order array by elements 
function SortByPuntuation(x,y) { 
    return x.puntuation - y.puntuation; 
} 

for (var i = data.length - 1; i >= 0; i--) { 
    if(arrayfinal){ 
     arrayfinal[i] = arrayfinal.push({'cathegory':data[i].cname , 'puntuation' : 2 * data[i].cnumber + data[i].click}); 
    } 
    else{ 
     arrayfinal[i] = {'cathegory':data[i].cname , 'puntuation' : 2 * data[i].cnumber + data[i].click }; 
    } 
}; 

arrayfinal = arrayfinal.sort(SortByPuntuation); 

的數據是另一個數組:

{"cname":"Sillas","cnumber":0,"click":1}, 
{"cname":"Mesas","cnumber":0,"click":2}, 
{"cname":"Plastico diferente","cnumber":0,"click":0}, 
{"cname":"Vasos","cnumber":5,"click":7}, 
{"cname":"Ordenadores","cnumber":0,"click":2}, 
{"cname":"Envases cuadrados","cnumber":0,"click":0}, 
{"cname":"Envases redondos","cnumber":0,"click":0}, 
{"cname":"Teclados ordenador","cnumber":0,"click":0}, 
{"cname":"Film transparente","cnumber":0,"click":0}, 
{"cname":"Pantallas","cnumber":0,"click":1}, 
{"cname":"Papeles","cnumber":0,"click":2}, 
{"cname":"Otro","cnumber":0,"click":0}, 
{"cname":"Coches","cnumber":0,"click":9}, 
{"cname":"Libros","cnumber":0,"click":2}, 
{"cname":"Asus","cnumber":0,"click":1} 

而且finalarray結果是:

[ 29, 
    { cathegory: 'Plastico diferente', puntuation: 0 }, 
    { cathegory: 'Envases cuadrados', puntuation: 0 }, 
    { cathegory: 'Otro', puntuation: 0 }, 
    { cathegory: 'Envases redondos', puntuation: 0 }, 
    { cathegory: 'Film transparente', puntuation: 0 }, 
    { cathegory: 'Teclados ordenador', puntuation: 0 }, 
    22, 
    21, 
    20, 
    19, 
    18, 
    17, 
    16, 
    28, 
    { cathegory: 'Sillas', puntuation: 1 }, 
    27, 
    26, 
    25, 
    { cathegory: 'Pantallas', puntuation: 1 }, 
    24, 
    23, 
    { cathegory: 'Papeles', puntuation: 2 }, 
    { cathegory: 'Ordenadores', puntuation: 2 }, 
    { cathegory: 'Libros', puntuation: 2 }, 
    { cathegory: 'Mesas', puntuation: 2 }, 
    { cathegory: 'Coches', puntuation: 9 }, 
    { cathegory: 'Vasos', puntuation: 17 }, 
    1 ] 

finalarray中出現的數字來自哪裏?

回答

2

這是因爲您要將push(這是新長度)的結果分配給arrayfinal[i]

變化

arrayfinal[i] = arrayfinal.push({'cathegory':data[i].cname , 'puntuation' : 2 * data[i].cnumber + data[i].click}); 

arrayfinal.push({'cathegory':data[i].cname , 'puntuation' : 2 * data[i].cnumber + data[i].click}); 
1

您的代碼能夠正常通過初始化數組,使用正向環路和推動每個元素到陣列工作。

var arrayfinal = []; 
for(var i = 0; i < data.length; i++) { 
    arrayfinal.push({ 
     'cathegory':data[i].cname , 
     'puntuation' : 2 * data[i].cnumber + data[i].click 
    }); 
}; 

避免創建的問題通過混合起來陣列查找和Array#push

arrayfinal[i] = arrayfinal.push(...); 

的元素被添加到它之後,返回該數組的新長度。


或者,您可以使用Array#map

var arrayfinal = data.map(function(category){ 
    return { 
    'cathegory': category.cname, 
    'puntuation': 2 * category.cnumber + category.click 
    }; 
}); 
相關問題