0

javascript で作成した json 配列で同じ ID を持つオブジェクトを取得したい

var Array = {               
    "1": {"text": "Number one", "time": "16 03 13"},
    "1": {"text": "Number two", "time": "14 03 13"},
    "1": {"text": "Number three", "time": "13 03 13"},
    "2": {"text": "Number one", "time": "13 03 13"},
};

このように試してみましたが、明らかに最初の結果(ナンバーワン)しか表示されません

var get = Array[1]; 
alert(get.text);

ループについて考えました、どうすればいいですか?

4

1 に答える 1

8
  • Array変数名として使用しないでください。
  • オブジェクト キーは複製できません。その場合、最新のエントリのみがそのキーに供給されます。他のものは破棄されます。あなたの場合、「1」キーを介して3番目の「1」のみにアクセスできます。
  • 必要なのはオブジェクトではなく配列です

あなたはこれを必要とします:

var myArray = [               
    {"id" : 1, "text": "Number one", "time": "16 03 13"},    //index 0
    {"id" : 1, "text": "Number two", "time": "14 03 13"},    //index 1
    {"id" : 1, "text": "Number three", "time": "13 03 13"},  //index 2
    {"id" : 2, "text": "Number one", "time": "13 03 13"}     //index 3
];

var i;

for(i=0;i<myArray.length;i++){
  if(myArray[i].id === 1){
    console.log(myArray[i].text);
  }
}

これは別のアプローチであり、これにはデータの再構築が必要です。ID が 1 のエントリに複数の値がある場合、各キーの下に配列を保持できます。

var myArray = {               
  "1" : [
    {"text": "Number one", "time": "16 03 13"},  //index 0
    {"text": "Number two", "time": "14 03 13"},  //index 1
    {"text": "Number three", "time": "13 03 13"} //index 2
  ],
  "2" : [
    {"text": "Number one", "time": "13 03 13"}   //index 0
  ]
};

var ones = myArray['1'];

for(i=0;i<ones.length;i++){
  console.log(ones[i].text);
}

別のアプローチは、Array.prototype.filterの使用です。

var myArray = [               
  {"id" : 1, "text": "Number one", "time": "16 03 13"},    //index 0
  {"id" : 1, "text": "Number two", "time": "14 03 13"},    //index 1
  {"id" : 1, "text": "Number three", "time": "13 03 13"},  //index 2
  {"id" : 2, "text": "Number one", "time": "13 03 13"}     //index 3
];

//create an array containing only those with id of 1
var filtered = myArray.filter(function(val,i,arr){
  return val.id === 1;
});

for(i=0;i<filtered.length;i++){
  console.log(filtered[i].text);
}
于 2013-03-16T11:09:40.453 に答える