javascript 从关联数组中选取随机数组元素

t1rydlwq  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(159)

如何从关联数组中选取与数组长度有关的随机数组元素?
例如:

actors[name]=firstname
movielist[title]=[director,artwork,actors]

如果我想取出一个随机数组元素和所有的信息,那么我该怎么做呢?

u3r8eeie

u3r8eeie1#

假设“关联数组”指的是JavaScript对象(具有零个或多个键/值属性),则可以执行如下操作,随机选择属性并返回其名称:

function getRandomObjectPropertyName(obj) {
   var a = [],
       k;

   for (k in obj)
      if (obj.hasOwnProperty(k)
         a.push(k);

   if (a.length === 0)
      return null; // or whatever default return you want for an empty object

   return a[Math.floor(Math.random() * a.length)];

   // or to return the actual value associated with the key:
   return obj[ a[Math.floor(Math.random() * a.length)] ];
}

如果不清楚上面的操作是如何工作的,它会将对象中的所有键名复制到一个数组中。根据需要,.hasOwnProperty()是可选的。因为数组有长度和数字索引项,所以可以使用Math函数随机选择一个项。
一旦你有了随机选择的键名,你就可以用它来访问那个属性的值。或者(如上所示)你可以改变函数来返回实际的值。或者(没有显示,但很简单)改变函数来返回键和值作为一个新的对象。由你决定。
从你的问题中我们还不清楚你的数据结构是什么,但是假设movielist是一个对象,其中每个属性都有一个键名,即电影标题,以及一个关联属性,即一个包含导演、艺术作品和演员嵌套数组的数组,那么你可以这样做:

var randomMovieTitle = getRandomObjectPropertyName(movielist);
// randomMovieTitle might be, say, "Back to the future"

// you could then get the list of actors associated with the movie like so:
var actorsFromRandomMovie = movielist[randomMovieTitle][2];

// or get the director:
alert(movielist[randomMovieTitle][0]); // "Robert Zemeckis"

编辑:如果你不关心旧的浏览器,你可以使用Object.keys()来获得所有键名的数组,然后从中随机选择。

相关问题