javascript - 解析 JSON 对象以获取唯一记录

标签 javascript json parsing object

我有以下 JSON 对象:

var data =JSON.parse('[{"Title":"Test 1","State":"Colorado"}, 
                       {"Title":"Test 1","State":"Arizona"},
                       {"Title":"Test 2","State":"Utah"},
                       {"Title":"Test 2","State":"Arizona"},
                       {"Title":"Test 3","State":"Arizona"}]');

如何解析此 data 对象以便获得以下输出:

resultData = [{"Title":"Test 1", State: ["Colorado", "Arizona"]},
              {"Title":"Test 2", State: ["Utah", "Arizona"]},
              {"Title":"Test 3", State: ["Arizona"]}]

到目前为止,我尝试了以下操作:

var resultData = {},
groupBy = "Title";

for (var i = 0; i < data.length; i++) {
    if (!resultData[data[i][groupBy]])
        resultData[data[groupBy]] = [];
    resultData[data[i][groupBy]].push(data[i]);
};

但它没有帮助并返回一些奇怪的对象,如下所示:

resultData = [{Test 1: [{State: "Colorado"}, {State: "Arizona"}]},
              {Test 2: [{State: "Utah"}, {State: "Arizona"}]},
              {Test 3: [{State: "Arizona"}]}]

有人可以帮助我实现同样的目标吗?

最佳答案

您想要实现的目标是减少的完美案例:

第 1 步 - 像您已经做的那样解析数据

var data =JSON.parse('[{"Title":"Test 1","State":"Colorado"}, 
                       {"Title":"Test 1","State":"Arizona"},
                       {"Title":"Test 2","State":"Utah"},
                       {"Title":"Test 2","State":"Arizona"},
                       {"Title":"Test 3","State":"Arizona"}]');

第 2 步 - 将具有相同标题的州合并到数组中

var titles = data.reduce(function(acc, item){
    var title = item.Title;
    var state = item.State;

    if (!Object.prototype.hasOwnProperty.call(acc, title)){
        acc[title] = [];
    }

    acc[title].push(state);
    return acc;
}, {});

第 3 步 - 使用组合状态构建最终数组

var resultData = Object.keys(titles).map(function(title){
    return {
        Title: title,
        State: titles[title]
    }
});

var data = JSON.parse('[{"Title":"Test 1","State":"Colorado"}, {"Title":"Test 1","State":"Arizona"},{"Title":"Test 2","State":"Utah"},{"Title":"Test 2","State":"Arizona"},{"Title":"Test 3","State":"Arizona"}]');

var titles = data.reduce(function(acc, item) {
  var title = item.Title;
  var state = item.State;

  if (!Object.prototype.hasOwnProperty.call(acc, title)) {
    acc[title] = [];
  }

  acc[title].push(state);
  return acc;
}, {});

var resultData = Object.keys(titles).map(function(title) {
  return {
    Title: title,
    State: titles[title]
  }
});

console.log(resultData)
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 解析 JSON 对象以获取唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44514235/

相关文章:

javascript - 无法使用函数的调用方法创建对象。如何使用 call 方法创建对象?

javascript - 如何通过jquery从html中获取图像标签

javascript - 带有换行符的标签 href 数据

android - 从 Android 发送带有参数的 json Http 请求

android - 多级 JSON 解析

javascript - 将 JavaScript 函数的返回值绑定(bind)到 ng-model

json - 在 json\jsonb 字段上使用 IN 进行 WHERE 查询

javascript - 如何使用 JSON 中的值填充 UL 列表项而不创建重复项?

Ruby 从 .split 中选择多个元素

ruby-on-rails - Ruby:如何在 Ruby 中读取包含两个 header 的 CSV 文件?