JSON: Как обрабатывать атрибуты, полученные из ключа - PullRequest
1 голос
/ 27 апреля 2011

В моем приложении есть такой объект 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"
    }
};

Свойства file и url всегда могут быть получены из соответствующего ключа, поэтому в настоящее время я определяю вышеуказанный объект следующим образом в моем коде:

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;
}

Однако, поскольку file и url являются производными атрибутами, добавление их в объект представляется излишним. Но так как я передаю значение для каждой страницы, а не ключ, мне придется добавить его и к объекту, что также будет избыточным. Как это:

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

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

Теперь у меня есть три разных подхода, и мне не очень нравится ни один из них. Я думаю, что это должно быть довольно распространенной проблемой, так как бы вы подошли к этому? А что, если производный атрибут будет использоваться более одного раза?

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Вы должны рассмотреть вопрос о хранении страниц в виде списка объектов, а не объекта со свойствами. Это кажется логически более логичным и решает ваши проблемы с избыточностью.

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

дополнительно. Вы можете создавать классы для объектов страницы и использовать методы, которые вычисляют производные свойства (возможно, кэшируя их, если вам кажется, что повторный доступ дорогостоящий. Однако делать это для простой конкатенации строк кажется излишним)

0 голосов
/ 28 апреля 2011

Почему вы хотите хранить одни и те же данные в другой форме, если они у вас уже есть в одной форме (ваш ключ).
На мой взгляд, не переходите ни на одну из них, потому что когда бы вы ничтобы получить file и url для конкретной страницы, вы можете легко получить ее из page.key.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...