你能告诉我一些如何用javascript(可以是jQuery)进行排序吗:
"A1" : { "value" : "No data", "href" : "/A1", "tooltip" : {"content" : "A1 No data"} },
"A2" : { "value" : "1111", "href" : "/A2", "tooltip" : {"content" : "A2 1111 (2013)"} },
"B1" : { "value" : "2222", "href" : "/B1", "tooltip" : {"content" : "B1 2222 (2010)"} },
"B1" : { "value" : "3333", "href" : "/B1", "tooltip" : {"content" : "B1 3333 (2009)"} },
我想取得一些成就,比如:
"B1" : {
"value" : {"y2009" : "3333", "y2010" : "2222"},
"href" : "/B1",
"tooltip" : {
"y2009" : {"content" : "B1 3333 (2009)"},
"y2010" : {"content" : "B1 2222 (2010)"}
}
}
假设您的数据是一个包含对象的数组,如下所示,您可以迭代并将所有元素分配给一个新的对象结构
var array = [{ "A1": { "value": "No data", "href": "/A1", "tooltip": { "content": "A1 No data" } } }, { "A2": { "value": "1111", "href": "/A2", "tooltip": { "content": "A2 1111 (2013)" } } }, { "B1": { "value": "2222", "href": "/B1", "tooltip": { "content": "B1 2222 (2010)" } } }, { "B1": { "value": "3333", "href": "/B1", "tooltip": { "content": "B1 3333 (2009)" } } }],
object = {};
array.forEach(function (a) {
var key = Object.keys(a)[0],
year = (/(?:()(d{4})(?:))/.exec(a[key].tooltip.content) || [, 'No data'])[1];
if (!(key in object)) {
object[key] = { "value": {}, "href": a[key].href, "tooltip": {} };
}
object[key].value[year] = a[key].value;
object[key].tooltip[year] = a[key].tooltip.content;
});
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');
正如评论中所指出的,如果不能更改接收到的数据以删除那些重复的属性,您将遭受很大的损失给你的服务人员打电话可能是你最好的选择。
然而,如果他特别固执,或者他是你的老板,或者如果他20年前带着服务器源代码的唯一副本离开了公司,你可以抓住这个(在所有浏览器都没有实现本地JSON.parse的旧时代)并分叉它
首先,这将让您了解JSON解析的复杂性,如果您成功地分叉,将为您提供一个不错的解决方案。
我将从步行功能行427:开始
function walk(holder, key) {
// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.
祝你好运:)