【问题标题】:Filter values from Arrays in Json (JavaScript)从 Json (JavaScript) 中的数组中过滤值
【发布时间】:2016-10-11 02:20:44
【问题描述】:

所以我从 D3 加载了一个 JSON 对象,现在想从数组中过滤掉一些列。我唯一的问题是这样做:

Object.attribute; 

不返回我想要的。我的 JSON 对象的结构如下。它包含 1000 个对象,每个数组都包含其中的属性。我从https://data.raleighnc.gov/resource/xce4-kemu.json 获取我的数据,以供参考。

如果我这样做了

Object[0].attribute;

它返回对象的实际值,比如“12”。我希望它在哪里返回该键存在的所有值

在 URL 中,您可以看到 JSON 的示例。例如,我想返回一个 JSON,其中仅存在 issuedate_mth、statelicnum 和 constcompletedofficial 属性。

我尝试过的片段是:

 var raleigh_data = "https://data.raleighnc.gov/resource/xce4-kemu.json";
d3.json(raleigh_data, function(error, data) {
var filtered_data = data.filter(function(d,i,e) {
return d.issueddate_mth;
});

}

【问题讨论】:

  • 这是一个包含 1000 个对象的数组,而不是 1000 个数组
  • 你想从这些数据中过滤什么?
  • 使用var filteredArray = xxx.filter(callbackFunction) 之类的东西来过滤数组(在这种情况下,数组是一个名为 xxx 的 var ...您不要想要使用一个名为 Object 的 var ) ... callbackFunction 是一个接受 3 个参数、项目、索引和整个数组的函数 ... 做你的逻辑并返回 true 或 false 以在返回的新数组中包含/排除项目
  • 我的理解是否正确——您想遍历数组中的每个对象并返回每个对象中存在的给定属性的所有值的数组?
  • @anied 我更新了我的答案,希望能更清楚

标签: javascript arrays d3.js filter


【解决方案1】:
var data = [your array of 1000 objects]
var filteredData = [];
data.forEach(function(item) { 
    if (item.issueddate_mth && item.statelicnum && item.constcompletedofficial) {
        filteredData.push(item);
    }
});

这将为您提供一个数组,该数组仅包含原始数组中具有指定属性的项目。

另外,我不能 100% 确定您是否只想要这三个属性。如果是这样,您可以轻松地在forEach 回调中推送{ issueddate_mth: item.issueddate_mth, statelicnum: item.statelicnum, constcompletedofficial: item.constcompletedofficial } 而不是item

【讨论】:

  • 有没有办法反其道而行之。这意味着我在 JSON 对象中取出了我不想要的属性?
  • 好的,我按照您指定的方式尝试了第二部分,效果非常棒。谢谢!!
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2017-07-18
相关资源
最近更新 更多