我有一个包含几个数组的对象。我试图随机返回其中一个数组。我有一个函数返回对象中的一个属性,但我不知道如何将它连接到对象名称时使用它。例如:
对象:
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;
返回&#39; [object Object] .itemTwo&#39;
这是一个小提琴:http://jsfiddle.net/xrk7b4zs/
感谢您的帮助
答案 0 :(得分:1)
您使用括号表示法:
var getItemInObject = pickRandomProperty(myObj);
var randProp = myObj[getItemInObject];
// ^ ^
在JavaScript中,您可以使用点表示法和属性名称 literal (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>"
);
&#13;
旁注:假设您只关心对象&#34;拥有&#34;这是一种更容易选择随机属性的方法。属性(不是原型中的属性):
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>"
);
&#13;
答案 1 :(得分:1)
您可以连接字符串,而不是代码。要从变量访问对象属性,请使用括号表示法:
var randWord = myObj[getItemInObject];
http://jsfiddle.net/xrk7b4zs/2/
但是,即使这段代码只返回对象属性,这是一个字符串数组,并且根据您的变量名称判断,您可能希望从该数组中选择一个随机字符串。
注意:如果由于某种原因你 使用点表示法,你可以使用eval
评估连续字符串,但不建议在+ 99%例。
答案 2 :(得分:1)
var getItemInObject = pickRandomProperty(myObj);
console.log(getItemInObject)
var randWord = myObj[getItemInObject];
你需要做myObj [getItemInObject];
答案 3 :(得分:0)
答案 4 :(得分:0)
您可以通过双向实现对象属性
您在此处的代码中使用了:
var myObj = {
itemOne:['blue','red','green'],
itemTwo:['sky','grass','book'],
itemThree:['day','month','year']
}
您可以通过两种方式获取对象属性值
1. myObj.itemOne // this way you used when you know what value you want to return.
2. myObj["itemOne"] // this way you will used when you want to access you object Property in generic Way. i recommend you to use this way.
在您的代码中:
var getItemInObject = pickRandomProperty(myObj); 这个变量包含你的 object.property名称,你可以通过运行函数返回。
var getItemInObject = pickRandomProperty(myObj);
所以你可以传递这个变量Like This来随机访问你的对象属性值
var randWord = myObj[getItemInObject];
console.log(randWord);
我希望这个答案可以帮助你实现你想要的目标。它会给你带来像。:
答案 5 :(得分:0)
var myObj = {
itemOne:['blue','red','green'],
itemTwo:['sky','grass','book'],
itemThree:['day','month','year']
}
function pickRandomProperty(myObj) {
var result;
var rKey = Math.floor((Math.random()*3)+1) -1;
return myObj.itemOne[rKey];
}
var getItemInObject = pickRandomProperty(myObj);
var randWord = 'myObj.itemOne' + '.' + getItemInObject;
console.log(randWord);
它有效!!!