2017-10-16 17 views
0

ストリッピングされますオブジェクトの機能は、私がchartJSのためにオブジェクトの配列を構築するために、この機能を実行している重複した値

data: { 
 
    datasets: [{ 
 
    data: getValues, 
 
    backgroundColor: getColorValues, 
 
    }], 
 
    labels: getLabels 
 
},

私は関数に入力している配列が同じ数の項目を持っていることを知っています。それぞれに19がありますが、実際には7つのオブジェクトしか作成されません。

私はいくつかの値が重複していることを知っています(数字です)。私は何とか私のロジックが重複していると値を取り除いていると思っています...私はこれを解決する必要があります。

+0

奇数ループの構文があります。 for(var i = 0、i csmckelvey

+0

@csm_dev毎回プロパティールックアップを行うのではなく、長さをキャッシュするのは一般的なイディオムです。 – Barmar

答えて

1

配列には異なる値がありますか?配列の値をキーとして新しいオブジェクトを構築しているので、別の値を持たないと、それらのキーが壊れてしまいます。あなたの配列は= [1、2、1、2]、最初の反復はverticalObjを設定する場合は

for (var i = 0, j = arr.length; i < j; i++) { 
    verticalObj[arr[i]] = (verticalObj[arr[i]] || 0) + 1; 
} 

例えば、[1] = 2、verticalObjを介して第2の時間は、[2] = 3回目

for (var i = 0; i < arr.length; i++) { 
    verticalObj[i] = (arr[i] || 0) + 1; 
} 

は(余分退治:

{ 
    1: 2, 
    2: 3 
} 

私が何を考えてあなたが望むことは何かのようなものです:verticalObjは、[1]最後に2を=を通して、あなたのような物になってしまいますあなたのforループも乱雑になります。なぜなら、あなたはを使用していないからです変数)

+0

実際には、最初の2回の反復でverticalObj [arr [i]]が定義されないので、{'1':2、 '2':2}になります。 – MikeTheReader

0

あなたのコードは、カウントに重複する値を入れますので、あなたは7つの値を持っている場合、それはこのようなものになります。右側の数字は、入力値のあなたの番号まで追加する必要があり

{ 
    1: 3, 
    2: 5, 
    3: 5, 
    4: 1, 
    5: 1, 
    6: 1, 
    7: 3 
} 

を(あなたが言ったから19)。

これが望ましい動作ではない場合は、入力と出力の例を挙げると便利です。

関連する問題