Javascript JSON:如何处理从键派生的属性?
在我的应用程序中有一个类似这样的JSON对象:Javascript JSON:如何处理从键派生的属性?,javascript,json,attributes,derived,Javascript,Json,Attributes,Derived,在我的应用程序中有一个类似这样的JSON对象: var pages = { home: { title: "Home", description: "The home page", file: "home.html", url: "/home" }, blog: { title: "Blog", description: "Our blog", file: "b
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"
}
};
属性文件
和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;
}
现在我有三种不同的方法,但我真的不喜欢其中任何一种。我认为这应该是一个相当普遍的问题,那么您将如何处理这个问题?如果派生属性要被多次使用,该怎么办?为什么要以不同的形式存储相同的数据,而您已经将其存储在一种形式(您的密钥)中了。
在我看来,不要使用任何一种方法,因为无论何时,只要您希望获取某个特定页面的
文件和url
,您都可以从页面轻松获取。key
为什么要将相同的数据存储在不同的表单中,而您已经将其存储在一种表单(您的密钥)中了。
在我看来,不要去做任何这些,因为每当你想得到一个特定的页面的<代码>文件>代码>代码> URL >代码>时,你可以很容易地从<代码>页面获得。这似乎在逻辑上更加一致,并解决了冗余问题
var pages = [
{
key: 'home'
title: "Home",
description: "The home page",
},
{
key: 'blog',
title: "Blog",
description: "Our blog",
}
];
另外。您可以为页对象创建类,并使用计算派生属性的方法(可选地缓存它们,以防您认为重复访问是昂贵的。但是,对于简单的字符串连接来说,这样做似乎是一个过份) 您应该考虑将页面存储为对象列表而不是具有属性的对象。这似乎在逻辑上更加一致,并解决了冗余问题
var pages = [
{
key: 'home'
title: "Home",
description: "The home page",
},
{
key: 'blog',
title: "Blog",
description: "Our blog",
}
];
另外。您可以为页面对象创建类,并使用计算派生属性的方法(如果您认为重复访问成本很高,可以选择缓存它们。但是,对于简单的字符串连接这样做似乎有点过分)我没有做到这一点,但实际上我需要根据它们的密钥访问页面。根据它们的URL,实际上不带前导“/”,这等于key.AFAIK,如果不在页面对象中重复key,就无法从对象中访问密钥。这些键不是单个页面对象的一部分。注意:在我的解决方案中,您仍然可以按键查找页面(您只需要在列表中搜索,当然这比对象属性访问要慢)。我未能做到这一点,但实际上我需要根据页面的键来访问页面。根据它们的URL,实际上不带前导“/”,这等于key.AFAIK,如果不在页面对象中重复key,就无法从对象中访问密钥。这些键不是单个页面对象的一部分。注意:在我的解决方案中,您仍然可以按键查找页面(您只需要搜索列表,当然这比对象属性访问要慢)。但是我应该如何访问键?考虑我调用某个函数(页[Health]),某个函数只能访问页面对象。我宁愿复制值中的键,也不愿将其传递给每个处理页面的函数。但是我应该如何访问该键呢?考虑我调用某个函数(页[Health]),某个函数只能访问页面对象。我宁愿复制值中的键,也不愿将其传递给每个处理页面的函数。