2

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に表示される数字はどこから来ていますか?

4

2 に答える 2

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});
于 2013-01-01T17:39:56.830 に答える
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
  };
});
于 2013-01-01T17:46:32.610 に答える