Javascript 如何使用dojo对Json中的不同值进行计数或求和
我想我们从ArcGIS服务器得到一个Json响应,如下所示:Javascript 如何使用dojo对Json中的不同值进行计数或求和,javascript,json,dojo,arcgis-server,Javascript,Json,Dojo,Arcgis Server,我想我们从ArcGIS服务器得到一个Json响应,如下所示: { "displayFieldName" : "ELTTYPE", "features" : [ { "attributes" : { "ELTTYPE" : "Faldunderlag", "DATANR" : 721301, "ELEMENTNR" : 40, "AREALTYPE" : "BELÆGNING", "SHAPE.area" : 26.4595572 } }
{ "displayFieldName" : "ELTTYPE",
"features" : [
{
"attributes" : {
"ELTTYPE" : "Faldunderlag",
"DATANR" : 721301,
"ELEMENTNR" : 40,
"AREALTYPE" : "BELÆGNING",
"SHAPE.area" : 26.4595572
}
},
{
"attributes" : {
"ELTTYPE" : "Prydplæne",
"DATANR" : 721301,
"ELEMENTNR" : 2,
"AREALTYPE" : "GRÆS",
"SHAPE.area" : 1993.23450096
}
},
{
"attributes" : {
"ELTTYPE" : "Busket",
"DATANR" : 721301,
"ELEMENTNR" : 18,
"AREALTYPE" : "BUSKE",
"SHAPE.area" : 2105.69020834
}
}...... and so on ]
}
我喜欢用ELEMENTNR的不同值和SHAPE.area的求和值创建一个数据网格
有人知道怎么做吗
塞巴斯蒂安参见
您需要包含筛选器脚本片段,以便将其用于不受支持的浏览器
function reduceMyData(input) {
var check = {};
return input.filter(function(item, index, ary){
var id = item.attributes["ELEMENTNR"];
if (check[id]) return false;
return check[id] = true;
});
}
var myFeatures = reduceMyData(data.features);
据我所知,您不仅需要获得具有不同ELENTNR的元素,还需要为具有相同ELENTNR的元素累积SHAPE.area。如果是:
var codes = {};
// features - is an array of features from your json
var distinctFeatures = dojo.filter(features, function(m){
if(typeof(codes[m.attributes.ELEMENTNR]) == "undefined"){
codes[m.attributes.ELEMENTNR] = m.attributes["SHAPE.area"];
return true;
}
else{ // if duplicate
codes[m.attributes.ELEMENTNR] += m.attributes["SHAPE.area"];
return false;
}
});
for(var index in distinctFeatures){
var elementNr = distinctFeatures[index].attributes.ELEMENTNR;
distinctFeatures[index].attributes["SHAPE.area"] = codes[elementNr];
}
您还可以使用dojo.filter或dojo.map设置/转换属性,如'id'@peller,我对dojo不太熟悉,只知道filter/map等包含在许多现代浏览器中,是ES5规范的一部分,并且有基于脚本的实现。我更喜欢在可能的情况下包含本机功能。不幸的是,并不是每个人都在运行Javascript 1.6方法的浏览器,也没有人在运行兼容ES5的浏览器。Dojo用于映射到本机方法。我忘了它为什么不再存在了。@peller,这就是我特别提到的原因,有一个脚本实现用于其他浏览器(IE),它不包括过滤器/映射等。