首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历JavaScript对象-我遗漏了什么?

遍历JavaScript对象-我遗漏了什么?
EN

Stack Overflow用户
提问于 2011-10-20 23:10:27
回答 3查看 177关注 0票数 2

这是一个非常简单的问题,但我不知道我做错了什么。假设我有这个对象:

代码语言:javascript
复制
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不能工作。为什么会这样呢?如何在不修改对象格式的情况下完成此操作?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-20 23:12:55

这是因为您要处理的是一个对象,而不是一个数组,所以您不能只用一个数字来索引对象。你必须做一些类似的事情:

代码语言:javascript
复制
var randnum = getRandomNumber(1, 3); // get random num between 1 and 3
var randomLink = features["feature" + randnum].link;

为了清楚起见,这个符号如下:

代码语言:javascript
复制
features["feature1"].link;

等同于

代码语言:javascript
复制
features.feature1.link;

如果您没有可以轻松生成的属性名称,比如"security“或”saving“,那么可以使用一个数组来帮助您,假设这些属性是静态的。

代码语言:javascript
复制
var properties = [ "security", "savings" ];
var randomProperty = properties[Math.floor(Math.random() * properties.length)];
var randomLink = features[randomProperty].link;

如果你不知道你的属性是什么,那么你可以收集它们:

代码语言:javascript
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2011-10-20 23:14:43

js对象不是数字索引的,您不能使用整数作为数组来访问它。

票数 0
EN

Stack Overflow用户

发布于 2011-10-20 23:17:12

与你原来的json结构不同的特性会让它看起来像features.something。但是,您实际上可以使特性成为json对象的数组。这将为您提供您想要的随机访问。但是,除非你考虑创建数组,否则它将是一个查找feature3的‘搜索’函数。

对于featuresrandomInteger.link,更改为下面的结构:

代码语言:javascript
复制
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"
    }]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7838056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档