2016-07-05 22 views
1

我正在从一个对象数组中选择一个随机元素,我不知道如何获得返回值的关键字。我的目标是这样的:如何在JavaScript中获取随机选择对象的关键字?

{ 
 
    "location": "LA", 
 
    "id": "34", 
 
    "prizes": { 
 
     "1": { 
 
      "prize": "Prize 1", 
 
      "quantity": "6", 
 
      "extracted": "" 
 
     }, 
 
     "3": { 
 
      "prize": "Prize 3", 
 
      "quantity": "10", 
 
      "extracted": "" 
 
     }, 
 
     "4": { 
 
      "prize": "Prize 4", 
 
      "quantity": "10", 
 
      "extracted": "" 
 
     } 
 
    } 
 
}

的我的代码,我选择随机是这样的:

var prizes_by_locations = locations[id_prizes].prizes; 
 
var final_prizes = []; 
 

 
for(var x in prizes_by_locations){ 
 
    final_prizes.push(prizes_by_locations[x]); 
 
} 
 

 
var prize = final_prizes[Math.floor(Math.random()*final_prizes.length)]; 
 

 
//here is the random chosen prize but I need to get the key too 
 
var chosen_prize = prize.prize;

我也不得不说,我第一次删除一些元素,这就是为什么键是1,3,4.

回答

3

做它的其他方式:选择对象随机密钥,那么你可以很容易地也得到了值:

var prizes_by_locations = locations[id_prizes].prizes; 
var keys = Object.keys(prizes_by_locations); 
var prize_key = keys[keys.length * Math.random() << 0]; 
var prize_value = prizes_by_locations[prize_key]; 
+0

谢谢。这似乎是对我来说最好的解决方案。 – Ionut

2

我希望我能正确理解你,并且randomKey变量是你需要的 var prizes_by_locations = locations [id_prizes] .prizes; var final_prizes = [];

for(var x in prizes_by_locations){ 
    final_prizes.push(prizes_by_locations[x]); 
} 
var randomKey = Math.floor(Math.random()*final_prizes.length); 
var prize = final_prizes[randomKey]; 

//here is the random chosen prize but I need to get the key too 
var chosen_prize = prize.prize; 
alert('The key is:' + randomKey); 
1
var prizes_by_locations = locations[id_prizes].prizes; 
var final_prizes = []; 
var keys = [] 

for(var x in prizes_by_locations){ 
    final_prizes.push({ 
     key: x, 
     result: prizes_by_locations[x]); 
} 
} 

var prize = final_prizes[Math.floor(Math.random()*final_prizes.length)]; 

//here is the random chosen prize but I need to get the key too 
var chosen_prize = prize.result.prize; 
var key = prize.key;