javascript - 将选择的随机属性连接到对象以获得数组?

标签 javascript

我有一个对象,里面有一些数组。我试图随机返回其中一个数组。我有一个返回对象中的属性之一的函数,但我不确定在将其连接到对象名称时如何使用它。例如:

对象:

var myObj = {
    itemOne:['blue','red','green'],
    itemTwo:['sky','grass','book'],
    itemThree:['day','month','year']
} 

要获取某个数组,我会执行 myObj.itemOne ,它将返回第一个数组。但我想随机返回一个数组。我有一个函数会随机返回 itemOneitemTwoitemThree,但是当将函数返回的内容与 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/

相关文章:

javascript - 如何从回调函数中查询引起ajax调用的表单?

javascript - 扩展函数返回的属性?

javascript - 在目录中导入整个文件

javascript - 具有相同字体、大小和颜色的两个 div.textContent 在 Chrome 中呈现不同

javascript - 当从客户端向服务器发送信息时,我是否在客户端或服务器端(或两者)强制执行规则?

c# - 使用knockoutjs过滤有界项目

javascript - 当我的输入值总计达到 50 后,如何启用提交按钮?

javascript - JQuery 将对象附加到附加对象

javascript - 在javascript中动态创建带有字符串索引的二维表

javascript - 我的 mouseup 代码有什么问题吗?