JSON: Как обрабатывать атрибуты, полученные из ключа?

StackOverflow https://stackoverflow.com/questions/5809228

Вопрос

У меня есть объект 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;
}

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top