1

JavaScript の if-else ステートメントがあります。Websocket からデータを取得し、true または false である条件に応じて、関連するブランチに入ります。

しかし、私が見つけたのは、両方の配列に追加されているデータが同じであることです。これはコードです:

    cities = JSON.parse(evt.data);
    if (cities.tag == 'red'){
        dataset.length = 0;
        console.log(cities.tag);
        for (var i = 0, item; item = buffer[i]; ++i) {
            buffer[i][1][0] = cities.clusters[item[0]] || 0;
            //console.log(buffer);
            dataset.push(buffer[i][1][0]);
            console.log('no1: ',dataset);  
        }
    }else{
        dataset2.length = 0;
        console.log(cities.tag);
        for (var i = 0, item; item = buffer2[i]; ++i) {
            buffer2[i][1][0] = cities.clusters[item[0]] || 0;
            dataset2.push(buffer2[i][1][0]);
            console.log('no2: ',dataset2);  
        }           
    }
    draw(); 

正しいブランチに入り、データが異なることはわかっていますが、どういうわけか、else ブランチのコードが if ブランチの配列を複製しているだけです。

コードに何かがあるに違いないと思いますが、何がわかりません。

ありがとう

4

2 に答える 2

1

コードをゆっくり読んで、次のように入力することを検討してください。

  • バッファ内のアイテムの すべてitemとインデックスについて:i
    • 前の式が定義されていない場合は、または buffer2[i][1][0] の値に 設定されます。cities.clusters[item[0]]0

しかし、ほら、ここにはすでに問題があります

バッファの特定のレベルのすべての要素が同じ型であると想定される場合、buffer2 は配列の配列の配列です。

つまりitem、配列の配列でitem[0]あり、要素ではなく配列です。それは、ステートメントが何らかの形で機能しないという意味ではありませんが、ある種の JavaScript 難読化コンテストに勝とうとしている場合を除き、それは適切なコードではなく、意図したものではない可能性があります。

編集:これは、配列を反復処理する奇妙な方法です。この宇宙には、そのように配列を反復処理する何らかの理由があるかもしれませんが、配列に何らかの方法で falseと評価される要素がある場合、すべての要素を反復処理することさえできません。

于 2012-12-17T17:02:27.480 に答える
0

部分的なコードを示しているため、コードを完全に理解できません。ほとんどのコードが正しい場合は、次のように array.push を交換することを提案します。

データセット.プッシュ(都市.クラスター[アイテム[0]] || 0);

データセット2.プッシュ(都市.クラスター[アイテム[0]] || 0);

buffer と buffer2 が同じでない場合、これは機能するはずです。

于 2012-12-17T15:40:47.940 に答える