Список объектов, Нужен совет, как их организовать - PullRequest
0 голосов
/ 18 июня 2019

У меня есть список объектов, который выглядит как пример ниже:

[
  {time: 68, value: 300, metric: "tubingPressure"},
  {time: 69, value: 300, metric: "tubingPressure"},
  {time: 70, value: 361.81, metric: "tubingPressure"},
  {time: 68, value: 137.62, metric: "oilTemp"},
  {time: 69, value: 133.41, metric: "oilTemp"},
  {time: 70, value: 126.68, metric: "oilTemp"},
  {time: 68, value: 172.22, metric: "flareTemp"},
  {time: 69, value: 147.03, metric: "flareTemp"},
  {time: 70, value: 173.11, metric: "flareTemp"}
]

в основном это значение "tubingPressure", "oilTemp" и "flareTemp" во время 68 с, 69 с и 70 с

Мне нужно отсортировать их по времени, чтобы это выглядело следующим образом:

data = [ { time:68, tubingpressure: 300, oilTemp: 137.62, flareTemp: 172.22 }, { time:69, tubingpressure: 300, oilTemp: 133.41, flareTemp: 147.03 }, { time:70, tubingpressure: 361.81, oilTemp: 126.68, flareTemp: 173.11 } ]

, если у нас есть больший набор данных (например, время отОт 68 до 5000), как лучше решить эту проблему?

Я пытался многократно повторять список, чтобы сгруппировать их, но я не уверен, что это хороший способ с точки зрения производительности.

Ответы [ 3 ]

0 голосов
/ 18 июня 2019

Используйте сортировку для сортировки вашего объекта, сортировка принимает обратный вызов с вашим условием.

arr.sort ([compareFunction])

var obj = [
  {time: 68, value: 300, metric: "tubingPressure"},
  {time: 69, value: 300, metric: "tubingPressure"},
  {time: 70, value: 361.81, metric: "tubingPressure"},
  {time: 68, value: 137.62, metric: "oilTemp"},
  {time: 69, value: 133.41, metric: "oilTemp"},
  {time: 70, value: 126.68, metric: "oilTemp"},
  {time: 68, value: 172.22, metric: "flareTemp"},
  {time: 69, value: 147.03, metric: "flareTemp"},
  {time: 70, value: 173.11, metric: "flareTemp"}
];


console.log(obj.sort((a, b) => a.time - b.time))
0 голосов
/ 18 июня 2019
arr1.forEach((obj) => {
    let object = newArr1.find(prevObj => prevObj.time === obj.time)
    let {metric,value,time} = obj;
    if(object){
        object[metric] = value;
    } else{
        let objectToPush = {
            time: time
        };
        objectToPush[metric] = value;
        newArr1.push(objectToPush)
    }
});
0 голосов
/ 18 июня 2019

var obj = [
  {time: 68, value: 300, metric: "tubingPressure"},
  {time: 69, value: 300, metric: "tubingPressure"},
  {time: 70, value: 361.81, metric: "tubingPressure"},
  {time: 68, value: 137.62, metric: "oilTemp"},
  {time: 69, value: 133.41, metric: "oilTemp"},
  {time: 70, value: 126.68, metric: "oilTemp"},
  {time: 68, value: 172.22, metric: "flareTemp"},
  {time: 69, value: 147.03, metric: "flareTemp"},
  {time: 70, value: 173.11, metric: "flareTemp"}
];

const groupBy = key => array =>
  array.reduce((objectsByKeyValue, obj) => {
    const value = obj[key];
    objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);
    return objectsByKeyValue;
  }, {});
  
  
  const groupByTime = groupBy('time');
  
  
  console.log(
  JSON.stringify({
    objTime: groupByTime(obj)
  }, null, 1)
);
  
  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...