这是一个非常简单的问题,但我无法弄清楚我做错了什么。说我有这个对象:
features: {
savings: {
link: "test.html",
img: "/_assets/img/related-content/sample.png"
},
security: {
link: "test2.html",
img: "/_assets/img/related-content/sample2.png"
},
speed: {
link: "test3.html",
img: "/_assets/img/related-content/sample3.png"
}
}
假设此格式已设置且无法更改。我可以通过features["savings"].link
这样的方式轻松选择。但是,假设我想从这个对象中获取一个随机项。我会生成一个随机数,然后使用它选择索引。但是features[randnum].link
不起作用。为什么是这样?如何在不修改对象格式的情况下执行此操作?
谢谢!
答案 0 :(得分:3)
这是因为你正在处理一个对象,而不是一个数组,所以你不能只用一个数字索引对象。你必须做类似的事情:
var randnum = getRandomNumber(1, 3); // get random num between 1 and 3
var randomLink = features["feature" + randnum].link;
只是为了澄清,这个符号:
features["feature1"].link;
与
相同features.feature1.link;
如果您没有可以轻松生成的属性名称,例如“security”或“savings”,则可以使用数组来帮助您,假设属性是静态的。
var properties = [ "security", "savings" ];
var randomProperty = properties[Math.floor(Math.random() * properties.length)];
var randomLink = features[randomProperty].link;
如果你不知道你的属性是什么,那么你可以收集它们:
var properties = [];
for (var prop in features) {
if (features.hasOwnProperty(prop)) {
properties.push(prop);
}
}
var randomProperty = properties[Math.floor(Math.random() * properties.length)];
var randomLink = features[randomProperty].link;
答案 1 :(得分:0)
js对象不是数字索引,不能使用整数作为数组访问它。
答案 2 :(得分:0)
针对原始json结构的[某些]功能将使其寻找features.something。但是,您实际上可以使功能成为json对象的数组。这将为您提供您想要的随机访问权限。但是,除非您考虑创建数组,否则它将成为查找feature3的“搜索”功能。
for features [randomInteger] .link,切换到下面的结构:
var features = [{
name:"feature1",
link: "test.html",
img: "/_assets/img/related-content/sample.png"
},
{
name:"feature2",
link: "test2.html",
img: "/_assets/img/related-content/sample2.png"
},
{
name:"feature3",
link: "test3.html",
img: "/_assets/img/related-content/sample3.png"
}]