2012-04-29 21 views
2

オブジェクト内の配列を作成すると、各タイムスタンプのためにJavaScriptを - 私は次のようなデータ構造を格納するために探しています

TIMESTAMP | NAME | COUNTS 

を、複数の名前があることができ、それぞれの名前がカウントのリストを持っています

123456 | EXAMPLE1 | 1,2,3,4 
     | EXAMPLE2 | 4,3,2,1 
     | EXAMPLE3 | 9,7,4,3 

私はタイムスタンプを知っているときにアクセスできるように、タイムスタンプをオブジェクトインデックスとして保存したいと思います。これにより、配列サイズの制限や定義などの問題もなくなります。

私が知りたいのは、各タイムスタンプの "名前"のリストを作成する方法と、各名前に対してカウントのリストを保存する方法です。

このデータ構造を作成して、特定のタイムスタンプと名前のすべてのカウントにアクセスする方法をアドバイスできますか?

これまでのところ、私はこれがあります。

dataObj[timestamp] = new Array(name,[count]); 

をしかし、私は2つの質問があります。

1)どのように私は、私はすでに名前を持っているかどうかを確認するためにテストするのでしょうか?

2)別の名前配列を追加するにはどうすればよいですか?

コメントありがとうございます。

よろしくお願いします。

+0

データはどこから(どのような形式で)送信されますか?データベース?そうでない場合は、JSONファイルにハードコードすることができます。 –

答えて

2

タイムスタンプ、名前、カウントを考える:あなたが一度に与えられたタイムスタンプ/名のペアのためのすべてのカウントを取得する場合、あなたは一つに最後の二つの文を組み合わせることができます

// if we haven't seen this timestamp, create a new object for it 
dataObj[timestamp] = dataObj[timestamp] || {}; 

// if we haven't seen this name yet in this time stamp, create a new array for it 
dataObj[timestamp][name] = dataObj[timestamp][name] || []; 

// add this count to the array 
dataObj[timestamp][name].push(count); 

を:

dataObj[timestamp][name] = countsArray; 
+0

'|| ='はJavaScriptの演算子ではありません... –

+0

@ imeVidas - d'oh。最近はあまりにも多くの言語を使用しています。ありがとう。 –

+0

@マークリード - 多くのおかげで、これは私が持っているコードよりはるかに簡単です。あなたのコメントをありがとう、本当に非常に役立つ。 よろしく、ベン。 – Ben

1

オブジェクト内にオブジェクトをネストすることができます。だからあなたのdataObj

var dataObj = {}, 
    currentTime = new Date().getTime(); 

dataObj[currentTime].example1 = [1,2,3,4];    //<== question 2 

// later ... 
if (dataObj[currentTime] && !dataObj[newTime].example2){ //<== question 1 
    dataObj[currentTime].example2 = [4,3,2,1];    //<== question 2 
} 

/* 
    lets say currentTime was 1335709735241. After the previous 
    code dataObj contains: 
    dataObj['1335709735241'].example1 => [1,2,3,4] 
    dataObj['1335709735241'].example2 -> [4,3,2,1] 
*/ 

ようないくつかのオブジェクトのプロパティの存在をチェックする別の方法を見ることができる:

if ('someproperty' in someObj) { /* etc. */} 
+0

ありがとう@Kooilncこれは確かに非常に役に立ちます。偉大な説明と理解するためにeay。 よろしく、ベン。 – Ben

0

私は、たとえば、あなたがチェックしているかわからないいくつかの詳細がありました

  1. 既存の配列に新しい数を追加しますか?
  2. 現在の配列を新しい配列に置き換えますか?
  3. 新しい情報は無視していいですか?

以下のコードは2です。置き換えます。キーは番号であるため、data.12345.example1が動作しないことhttp://jsfiddle.net/DrPw6/1/

var data = {}; 
    setNameArray('12345', 'example1', [1,2,3]); 
    setNameArray(33, 'example2', [4,5,6]); 

    function setNameArray(timestamp, name, array) { 
    if (!(timestamp in data)) { 
     data[timestamp] = {}; 
    } 
    data[timestamp][name] = array; 
    } 

    function nameExists(timestamp, name) { 
    return (name in data[timestamp]); 
    } 
    // to read 
    document.write(data['12345'].example1 + "<br>"); 
    document.write(data['12345']['example1'] + "<br>"); 
    document.write(JSON.stringify(data)); 

注それを試してみてください。

0
var timeStamp = new Object(); 

    function propCreator(obj, k, arr) { 
    if (!obj.hasOwnProperty(k)) { 
      obj[k] = arr; 
     } 
      else { 
      alert("sry. object have property " + k); 
      } 
    } 

// create new name and array   
var arr = [3,4,5,6]; 
var name = "theName"; 
// then you can add new new property and its value to the object: 
propCreator(timeStamp, name, arr); 
alert(JSON.stringify(timeStamp)) 
関連する問題