Как наиболее эффективно преобразовать этот объект JavaScript в более полезную структуру? - PullRequest
0 голосов
/ 11 июня 2019

Например, в настоящее время у меня есть несколько объектов, которые выводят в:

{
    "location": {
        "category": "Data_Set_1",
        "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
}
{
    "location": {
        "category": "Data_Set_2",
        "categoryID": "2ec5e0c1-b839-59a6-8fd5-b09468d6cdd7"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
}
{
    "location": {
        "category": "Data_Set_1",
        "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
}
{
    "location": {
        "category": "Data_Set_3",
        "categoryID": "b905ae3d-1a41-5659-b15e-f305588a0afa"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
}

В основном у меня есть 13 различных наборов данных (например, Data_Set_1, Data_Set_2 и т. Д.), Которые появляются несколько случайно и более одного раза в этом большом наборе из множества повторяющихся объектов. Каждый набор данных имеет около 6000 точек ввода данных (dataEntryNumber: 0010, dataEntryNumber 0016 и т. Д.).

Как бы я проанализировал эти данные, чтобы соответствовать формату:

{
    "category": "Data_Set_1",
    "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    data: {
        "0001": {
            "value": 1.42343432,
            "timestamp": "null"
        }
        "0002": {
            "value: 1.424234255,
            "timestamp": "null"
        etc... etc...
    }
    etc... etc...
}
{
    "category": "Data_Set_2",
    "categoryID": "2ec5e0c1-b839-59a6-8fd5-b09468d6cdd7"
    data: {
        "0001": {
            "value": 9.42343432,
            "timestamp": "null"
        }
        "0002": {
            "value: 13.424234255,
            "timestamp": "null"
        etc... etc...
    }
    etc... etc...
}
etc... etc...

Я знаю, что это, возможно, неправильное форматирование JSON, поэтому любая помощь будет отличной! Только часть с надписью «данные» должна быть в JSON. Остальное может остаться таким, какое оно есть.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Я написал библиотеку под названием blinq (по образцу Microsoft Linq-to-Objects), которая предоставляет ряд полезных преобразований в итерируемых последовательностях.Он очень хорошо подходит для такого рода преобразований.

Преобразование может быть выполнено следующим образом:

const query = blinq(data)
  .groupBy(item => item.location.categoryID)
  .select(g => ({
    ...g.first().location,
    data: g.aggregate({}, (prev, item) => ({
      ...prev,
      [item.data_objects.dataEntryNumber]: item.data_objects.data
    }))
  }))
const output = [...query]
console.log(output)

Рабочий пример приведен ниже.

const {
  blinq
} = window.blinq

const data = [{
    "location": {
      "category": "Data_Set_1",
      "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    },
    "data_objects": {
      "dataEntryNumber": "0010",
      "data": {
        "value": 1.4593582153320312,
        "timestamp": "null"
      }
    }
  },
  {
    "location": {
      "category": "Data_Set_2",
      "categoryID": "2ec5e0c1-b839-59a6-8fd5-b09468d6cdd7"
    },
    "data_objects": {
      "dataEntryNumber": "0010",
      "data": {
        "value": 1.4593582153320312,
        "timestamp": "null"
      }
    }
  },
  {
    "location": {
      "category": "Data_Set_1",
      "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    },
    "data_objects": {
      "dataEntryNumber": "0010",
      "data": {
        "value": 1.4593582153320312,
        "timestamp": "null"
      }
    }
  },
  {
    "location": {
      "category": "Data_Set_1",
      "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    },
    "data_objects": {
      "dataEntryNumber": "0011",
      "data": {
        "value": 1.4593582153320312,
        "timestamp": "null"
      }
    }
  },
  {
    "location": {
      "category": "Data_Set_3",
      "categoryID": "b905ae3d-1a41-5659-b15e-f305588a0afa"
    },
    "data_objects": {
      "dataEntryNumber": "0010",
      "data": {
        "value": 1.4593582153320312,
        "timestamp": "null"
      }
    }
  }
]

const query = blinq(data)
  .groupBy(item => item.location.categoryID)
  .select(g => ({
    ...g.first().location,
    data: g.aggregate({}, (prev, item) => ({
      ...prev,
      [item.data_objects.dataEntryNumber]: item.data_objects.data
    }))
  }))
const output = [...query]
console.log(output)
<script src="https://cdn.jsdelivr.net/npm/blinq"></script>
0 голосов
/ 11 июня 2019

Похоже, вы хотите улучшить свои объекты.Вы можете сделать это, используя карту, и назначив нужные клавиши нужным значениям:

var arr = [{
    "location": {
        "category": "Data_Set_1",
        "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
},
{
    "location": {
        "category": "Data_Set_2",
        "categoryID": "2ec5e0c1-b839-59a6-8fd5-b09468d6cdd7"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
},
{
    "location": {
        "category": "Data_Set_1",
        "categoryID": "66e711cb-81ad-5e22-9fc7-910283924442"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
},
{
    "location": {
        "category": "Data_Set_3",
        "categoryID": "b905ae3d-1a41-5659-b15e-f305588a0afa"
    },
    "data_objects": {
        "dataEntryNumber": "0010",
        "data": {
            "value": 1.4593582153320312,
            "timestamp": "null"
        }
    }
}]

console.log(arr.map(({location, data_objects: d}) => ({
  data: {
    [d.dataEntryNumber]: {...d.data}
  },
  ...location
})))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...