如何使用 dojo 对 Json 中的不同值进行计数或求和

发布于 2024-08-21 15:46:50 字数 725 浏览 12 评论 0原文

我从 ArcGIS 服务器收到了一个 Json 响应,如下所示:

{  "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 的求和值创建一个数据网格。

有人知道如何做到这一点吗?

塞巴斯蒂安

I'we got a Json response from a ArcGIS server that look like this:

{  "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 ]
}

I like to make a datagrid with the distinct values of ELEMENTNR and the summurized values of SHAPE.area.

Does any have an idea how to do this?

Sebastian

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一江春梦 2024-08-28 15:46:50

请参阅 Array.prototype.filter

您需要包含过滤器脚本片段,以便将其用于不支持的浏览器。

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);

see Array.prototype.filter

You'll need to include the filter script snippet in order to utilize it for unsupported browsers..

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);
初相遇 2024-08-28 15:46:50

据我了解,您不仅需要获取具有不同 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];
}

As I understand you need not only to get elements with distinct ELENTNR, but also to accumulate SHAPE.area for the elements with the same ELENTNR. If so:

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];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文