1

我的应用程序中有一个这样的 JSON 对象:

var pages = {
    home: {
        title: "Home",
        description: "The home page",
        file: "home.html",
        url: "/home"
    },
    blog: {
        title: "Blog",
        description: "Our blog",
        file: "blog.html",
        url: "/blog"
    }
};

属性fileurl总是可以从各自的键派生,所以我目前在我的代码中这样定义上面的对象:

var pages = {
    home: {
        title: "Home",
        description: "The home page"
    },
    blog: {
        title: "Blog",
        description: "Our blog"
    }
};

$.each(pages, function(key, value) {
    value.file = key + ".html";
    value.url = "/" + key;
}

但是,由于fileurl是派生属性,将它们添加到对象中似乎是多余的。但是由于我为每个页面传递值,而不是键,所以我也必须将它添加到对象中,这也是多余的。像这样:

var pages = {
    home: {
        title: "Home",
        description: "The home page"
    },
    blog: {
        title: "Blog",
        description: "Our blog"
    }
};

$.each(pages, function(key, value) {
    value.jsonKey = key;
}

现在我有三种不同的方法,我不太喜欢其中任何一种。我认为这应该是一个相当普遍的问题,那么您将如何解决这个问题?如果要多次使用派生属性怎么办?

4

2 回答 2

1

您应该考虑将页面存储为对象列表而不是具有属性的对象。这在逻辑上似乎更一致,并解决了您的冗余问题。

var pages = [
    {
        key: 'home'
        title: "Home",
        description: "The home page",
    },
    {
        key: 'blog',
        title: "Blog",
        description: "Our blog",
    }
];

此外。您可以为页面对象创建类并使用计算派生属性的方法(可以选择缓存它们,以防您认为重复访问成本很高。但是,为简单的字符串连接这样做似乎有点过头了)

于 2011-04-27T20:48:38.243 回答
0

当您已经以一种形式(您的密钥)拥有相同的数据时,为什么还要以不同的形式存储相同的数据。
在我看来,不要使用其中任何一个,因为无论何时您希望获取特定页面的file和,都可以轻松地从.urlpage.key

于 2011-04-27T20:41:53.893 回答