0

サイクル内で配列 A を B にプッシュし、B の反復ごとに、配列 A を削除して新しい配列を作成する必要があります。配列をクリアする前にすべてのデータを取得しますが、クリア後に空の値を持つ配列 B を取得します

コード :

for (i = 0; i < XArray.length; i++) {
    var pointsArray = [];

    for (j = 0; j < XArray.length; j++) {

        if (XArray[i] == XArray[j]) {
            pointsArray.push([parseFloat(YArray[i]), parseFloat(ZArray[i])]);
        }
    }

    dataSource.push({
        name: i,
        data: pointsArray
    });
    pointsArray.length = 0;
}
4

1 に答える 1

3

最後の行

pointsArray.length = 0;

最初の行で作成した配列のすべての要素を削除します。また、すべてのオブジェクトは参照によって割り当てられる (そして配列はオブジェクトである) ため、dataオブジェクトのプロパティは空の配列を指すようになります。簡単な例を次に示します。

var a = [1, 2];
var b = a;
a.length = 0;
console.log(b); // [] -- an empty array

したがって、現在のコードは次と同じ効果があります

dataSource.push({
    name: i,
    data: []
});

解決策:最後の行を削除するだけで、期待どおりに機能します。

于 2013-09-30T11:26:15.843 に答える