这是一个非常简单的问题,但我不知道我做错了什么。假设我有这个对象:
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不能工作。为什么会这样呢?如何在不修改对象格式的情况下完成此操作?
谢谢!
发布于 2011-10-20 23:12:55
这是因为您要处理的是一个对象,而不是一个数组,所以您不能只用一个数字来索引对象。你必须做一些类似的事情:
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“或”saving“,那么可以使用一个数组来帮助您,假设这些属性是静态的。
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;发布于 2011-10-20 23:14:43
js对象不是数字索引的,您不能使用整数作为数组来访问它。
发布于 2011-10-20 23:17:12
与你原来的json结构不同的特性会让它看起来像features.something。但是,您实际上可以使特性成为json对象的数组。这将为您提供您想要的随机访问。但是,除非你考虑创建数组,否则它将是一个查找feature3的‘搜索’函数。
对于featuresrandomInteger.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"
}]https://stackoverflow.com/questions/7838056
复制相似问题