我有一个对象,里面有一些数组。我试图随机返回其中一个数组。我有一个返回对象中的属性之一的函数,但我不确定在将其连接到对象名称时如何使用它。例如:
对象:
var myObj = {
itemOne:['blue','red','green'],
itemTwo:['sky','grass','book'],
itemThree:['day','month','year']
}
要获取某个数组,我会执行 myObj.itemOne
,它将返回第一个数组。但我想随机返回一个数组。我有一个函数会随机返回 itemOne
、itemTwo
或 itemThree
,但是当将函数返回的内容与 myObj 连接时。
它不起作用。我能做些什么。这是函数:
function pickRandomProperty(myObj) {
var result;
var count = 0;
for (var prop in myObj){
if (Math.random() < 1/++count){
result = prop;
}
}
return result;
}
var getItemInObject = pickRandomProperty(myObj);
使用 getItemInObject
返回的内容,我尝试将其与 myObj 连接起来以返回数组。我该怎么做呢?这是我尝试过的:
var getItemInObject = pickRandomProperty(myObj);
var randProp = myObj.getItemInObject;
甚至:
var randWord = myObj + '.' + getItemInObject;
返回“[object Object].itemTwo”
这是一个 fiddle :http://jsfiddle.net/xrk7b4zs/
感谢您的帮助
最佳答案
您使用括号表示法:
var getItemInObject = pickRandomProperty(myObj);
var randProp = myObj[getItemInObject];
// ^ ^
在 JavaScript 中,您可以使用点表示法和属性名称文字 (obj.foo
) 或方括号表示法和属性名称来引用属性string (obj["foo"]
) (或 ES6+ 中的 Symbol
,但这与这里无关)。在第二种情况下,字符串可以是任何表达式的结果,包括变量引用。
实例:
var myObj = {
itemOne:['blue','red','green'],
itemTwo:['sky','grass','book'],
itemThree:['day','month','year']
}
function pickRandomProperty(myObj) {
var result;
var count = 0;
for (var prop in myObj){
if (Math.random() < 1/++count){
result = prop;
}
}
return result;
}
var getItemInObject = pickRandomProperty(myObj);
var array = myObj[getItemInObject];
document.body.insertAdjacentHTML(
"beforeend",
"<pre>" + JSON.stringify(array) + "</pre>"
);
旁注:有一种更简单的方法来选择随机属性,假设您只关心对象的“自己”属性(而不是其原型(prototype)中的属性):
function pickRandomProperty(myObj) {
var keys = Object.keys(myObj);
return keys[Math.floor(Math.random() * keys.length)];
}
实例:
var myObj = {
itemOne:['blue','red','green'],
itemTwo:['sky','grass','book'],
itemThree:['day','month','year']
}
function pickRandomProperty(myObj) {
var keys = Object.keys(myObj);
return keys[Math.floor(Math.random() * keys.length)];
}
var getItemInObject = pickRandomProperty(myObj);
var array = myObj[getItemInObject];
document.body.insertAdjacentHTML(
"beforeend",
"<pre>" + JSON.stringify(array) + "</pre>"
);
关于javascript - 将选择的随机属性连接到对象以获得数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305220/