首页 > 解决方案 > 如何按索引而不是名称映射 JSON 属性

问题描述

我有 web 应用程序,我有以下 JSON 数组:

var data=[ 
 { "category" : "Search Engines", "hits" : 5, "bytes" : 50189 },
 { "category" : "Content Server", "hits" : 1, "bytes" : 17308 },
 { "category" : "Content Server", "hits" : 1, "bytes" : 47412 },
 { "category" : "Search Engines", "hits" : 1, "bytes" : 7601 },
 { "category" : "Business", "hits" : 1, "bytes" : 2847 },
 { "category" : "Content Server", "hits" : 1, "bytes" : 24210 },
 { "category" : "Internet Services", "hits" : 1, "bytes" : 3690 },
 { "category" : "Search Engines", "hits" : 6, "bytes" : 613036 },
 { "category" : "Search Engines", "hits" : 1, "bytes" : 2858 } 
];

我想hits在一个单独的表中获取字段,例如 var hits = [5,1,1,1,1,1,1,6,1]

我知道,data.map(x=>x.hits) 但我在 json 中的属性名称是动态的。我事先不知道我的财产名称。所以我需要在 Json 中使用属性索引。

我知道可以通过 json 循环使用,

但是有没有办法hits在没有任何循环的情况下在一个语句中获得所有内容?

标签: javascriptjqueryarraysjsontypescript

解决方案


首先,您需要使用 Object.keys 获取密钥。然后只需放一个 Map 功能即可完成您的任务。

var data=[ 
     { "category" : "Search Engines", "hits" : 5, "bytes" : 50189 },
     { "category" : "Content Server", "hits" : 1, "bytes" : 17308 },
     { "category" : "Content Server", "hits" : 1, "bytes" : 47412 },
     { "category" : "Search Engines", "hits" : 1, "bytes" : 7601 },
     { "category" : "Business", "hits" : 1, "bytes" : 2847 },
     { "category" : "Content Server", "hits" : 1, "bytes" : 24210 },
     { "category" : "Internet Services", "hits" : 1, "bytes" : 3690 },
     { "category" : "Search Engines", "hits" : 6, "bytes" : 613036 },
     { "category" : "Search Engines", "hits" : 1, "bytes" : 2858 } 
    ];
var KeyName=Object.keys(data[0])[1]
data.map(x => x[KeyName]);

推荐阅读