如何从具有公共键:值对的对象数组中制作单个对象

问题描述 投票:0回答:2

我有一些数据

var list =[{date: "2019-09-27T08:00", atmosphericpressure: 80.58},
{date: "2019-09-27T08:00", lightningdistance: 0},
{date: "2019-09-27T08:00", lightningevents: 0},
{date: "2019-09-27T08:00", precipitation: 0},
{date: "2019-09-27T08:00", radiation: 829.03},
{date: "2019-09-27T08:00", relativehumidity: 0.78},
{date: "2019-09-27T08:00", temperature: 20.24},
{date: "2019-09-27T08:00", winddirection: 56.43},
{date: "2019-09-27T08:00", windgusts: 3.78},
{date: "2019-09-27T08:00", windspeed: 1.73},

{date: "2019-09-27T09:00", atmosphericpressure: 80.5},
{date: "2019-09-27T09:00", lightningdistance: 0},
{date: "2019-09-27T09:00", lightningevents: 0},
{date: "2019-09-27T09:00", precipitation: 0},
{date: "2019-09-27T09:00", radiation: 739.98},
{date: "2019-09-27T09:00", relativehumidity: 0.74},
{date: "2019-09-27T09:00", temperature: 20.82},
{date: "2019-09-27T09:00", winddirection: 52.83},
{date: "2019-09-27T09:00", windgusts: 2.95},
{date: "2019-09-27T09:00", windspeed: 1.54}]

并且我想将其转换为

var list =[
   { 
    date: '2019-09-27T08:00',
    atmosphericpressure: 80.58,
    lightningdistance: 0,
    lightningevents: 0,
    precipitation: 0,
    radiation: 829.03,
    relativehumidity: 0.78,
    temperature: 20.24,
    winddirection: 56.43,
    windgusts: 3.78,
    windspeed: 1.73
},
{
date: '2019-09-27T09:00',
    atmosphericpressure: 80.5,
    lightningdistance: 0,
    lightningevents: 0,
    precipitation: 0,
    radiation: 739.98,
    relativehumidity: 0.74,
    temperature: 22.82,
    winddirection: 52.83,
    windgusts: 2.95,
    windspeed: 1.54
}
]

我已经尝试过使用类似的过滤器

let temp=[]
   let result = list.filter(obj => {
  if(obj.date === '2019-09-27T09:00'){
   let group= {
     date:obj.date,
    atmosphericpressure:obj.atmosphericpressure,
    lightningdistance:obj.lightningdistance,
    lightningevents:obj.lightningevents,
    precipitation:obj.precipitation,
    radiation:obj.radiation,
    relativehumidity:obj.relativehumidity,
    temperature:obj.temperature,
    winddirection:obj.winddirection,
    windgusts:obj.windgusts,
    windspeed:obj.windspeed
    }
    temp.push(group)
  }
})

console.log(temp)

但是结果不是我想要的,我得到以下信息

[
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": 80.5,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": 0,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": 0,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": 0,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": 739.98,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": 0.74,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": 20.82,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": 52.83,
    "windgusts": undefined,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": 2.95,
    "windspeed": undefined
  },
  {
    "date": "2019-09-27T09:00",
    "atmosphericpressure": undefined,
    "lightningdistance": undefined,
    "lightningevents": undefined,
    "precipitation": undefined,
    "radiation": undefined,
    "relativehumidity": undefined,
    "temperature": undefined,
    "winddirection": undefined,
    "windgusts": undefined,
    "windspeed": 1.54
  }
]

这是我的代码,请运行以查看结果以及如何根据我的意愿进行处理

var list = [{date: "2019-09-27T08:00", atmosphericpressure: 80.58},
{date: "2019-09-27T08:00", lightningdistance: 0},
{date: "2019-09-27T08:00", lightningevents: 0},
{date: "2019-09-27T08:00", precipitation: 0},
{date: "2019-09-27T08:00", radiation: 829.03},
{date: "2019-09-27T08:00", relativehumidity: 0.78},
{date: "2019-09-27T08:00", temperature: 20.24},
{date: "2019-09-27T08:00", winddirection: 56.43},
{date: "2019-09-27T08:00", windgusts: 3.78},
{date: "2019-09-27T08:00", windspeed: 1.73},
{date: "2019-09-27T09:00", atmosphericpressure: 80.5},
{date: "2019-09-27T09:00", lightningdistance: 0},
{date: "2019-09-27T09:00", lightningevents: 0},
{date: "2019-09-27T09:00", precipitation: 0},
{date: "2019-09-27T09:00", radiation: 739.98},
{date: "2019-09-27T09:00", relativehumidity: 0.74},
{date: "2019-09-27T09:00", temperature: 20.82},
{date: "2019-09-27T09:00", winddirection: 52.83},
{date: "2019-09-27T09:00", windgusts: 2.95},
{date: "2019-09-27T09:00", windspeed: 1.54},
{date: "2019-09-27T10:00", atmosphericpressure: 80.37},
{date: "2019-09-27T10:00", lightningdistance: 0},
{date: "2019-09-27T10:00", lightningevents: 0},
{date: "2019-09-27T10:00", precipitation: 0},
{date: "2019-09-27T10:00", radiation: 662.45},
{date: "2019-09-27T10:00", relativehumidity: 0.69},
{date: "2019-09-27T10:00", temperature: 21.64},
{date: "2019-09-27T10:00", winddirection: 68.55},
{date: "2019-09-27T10:00", windgusts: 2.59},
{date: "2019-09-27T10:00", windspeed: 1.17},
{date: "2019-09-27T11:00", atmosphericpressure: 80.3},
{date: "2019-09-27T11:00", lightningdistance: 0},
{date: "2019-09-27T11:00", lightningevents: 0},
{date: "2019-09-27T11:00", precipitation: 0},
{date: "2019-09-27T11:00", radiation: 292.93},
{date: "2019-09-27T11:00", relativehumidity: 0.66},
{date: "2019-09-27T11:00", temperature: 21.31},
{date: "2019-09-27T11:00", winddirection: 47.26},
{date: "2019-09-27T11:00", windgusts: 2.74},
{date: "2019-09-27T11:00", windspeed: 1.24},
{date: "2019-09-27T12:00", atmosphericpressure: 80.24},
{date: "2019-09-27T12:00", lightningdistance: 0},
{date: "2019-09-27T12:00", lightningevents: 0},
{date: "2019-09-27T12:00", precipitation: 0},
{date: "2019-09-27T12:00", radiation: 168.85},
{date: "2019-09-27T12:00", relativehumidity: 0.65},
{date: "2019-09-27T12:00", temperature: 21.23},
{date: "2019-09-27T12:00", winddirection: 46.44},
{date: "2019-09-27T12:00", windgusts: 1.77},
{date: "2019-09-27T12:00", windspeed: 0.87},
{date: "2019-09-27T13:00", atmosphericpressure: 80.22},
{date: "2019-09-27T13:00", lightningdistance: 0},
{date: "2019-09-27T13:00", lightningevents: 0},
{date: "2019-09-27T13:00", precipitation: 0},
{date: "2019-09-27T13:00", radiation: 133.87},
{date: "2019-09-27T13:00", relativehumidity: 0.65},
{date: "2019-09-27T13:00", temperature: 20.89},
{date: "2019-09-27T13:00", winddirection: 44.6},
{date: "2019-09-27T13:00", windgusts: 1.7},
{date: "2019-09-27T13:00", windspeed: 1.02},
{date: "2019-09-27T14:00", atmosphericpressure: 80.25},
{date: "2019-09-27T14:00", lightningdistance: 0},
{date: "2019-09-27T14:00", lightningevents: 0},
{date: "2019-09-27T14:00", precipitation: 0},
{date: "2019-09-27T14:00", radiation: 79.42},
{date: "2019-09-27T14:00", relativehumidity: 0.65},
{date: "2019-09-27T14:00", temperature: 20.56},
{date: "2019-09-27T14:00", winddirection: 48.5},
{date: "2019-09-27T14:00", windgusts: 1.79},
{date: "2019-09-27T14:00", windspeed: 0.95},
{date: "2019-09-27T15:00", atmosphericpressure: 80.3},
{date: "2019-09-27T15:00", lightningdistance: 0},
{date: "2019-09-27T15:00", lightningevents: 0},
{date: "2019-09-27T15:00", precipitation: 0},
{date: "2019-09-27T15:00", radiation: 16.2},
{date: "2019-09-27T15:00", relativehumidity: 0.7},
{date: "2019-09-27T15:00", temperature: 19.46},
{date: "2019-09-27T15:00", winddirection: 352.4},
{date: "2019-09-27T15:00", windgusts: 0.68},
{date: "2019-09-27T15:00", windspeed: 0.42},
{date: "2019-09-27T16:00", atmosphericpressure: 80.37},
{date: "2019-09-27T16:00", lightningdistance: 0},
{date: "2019-09-27T16:00", lightningevents: 0},
{date: "2019-09-27T16:00", precipitation: 0},
{date: "2019-09-27T16:00", radiation: 0},
{date: "2019-09-27T16:00", relativehumidity: 0.77},
{date: "2019-09-27T16:00", temperature: 18.43},
{date: "2019-09-27T16:00", winddirection: 333.37},
{date: "2019-09-27T16:00", windgusts: 1.73},
{date: "2019-09-27T16:00", windspeed: 0.89},
{date: "2019-09-27T17:00", atmosphericpressure: 80.41},
{date: "2019-09-27T17:00", lightningdistance: 0},
{date: "2019-09-27T17:00", lightningevents: 0},
{date: "2019-09-27T17:00", precipitation: 0},
{date: "2019-09-27T17:00", radiation: 0},
{date: "2019-09-27T17:00", relativehumidity: 0.85},
{date: "2019-09-27T17:00", temperature: 17.42},
{date: "2019-09-27T17:00", winddirection: 353.25},
{date: "2019-09-27T17:00", windgusts: 0.94},
{date: "2019-09-27T17:00", windspeed: 0.46}
];
  let temp=[]
   let result = list.filter(obj => {
  if(obj.date === '2019-09-27T09:00'){
   let group= {
     date:obj.date,
    atmosphericpressure:obj.atmosphericpressure,
    lightningdistance:obj.lightningdistance,
    lightningevents:obj.lightningevents,
    precipitation:obj.precipitation,
    radiation:obj.radiation,
    relativehumidity:obj.relativehumidity,
    temperature:obj.temperature,
    winddirection:obj.winddirection,
    windgusts:obj.windgusts,
    windspeed:obj.windspeed
    }
    temp.push(group)
  }
})

console.log(temp)

我真的需要一些有关如何实现这一目标的见解,任何人都可以提供帮助。我还附上了我当前执行情况的摘要,以便可以轻松查看我在做什么

javascript
2个回答
0
投票

您可以使用数组forEach实现所需的内容

var list =[{date: "2019-09-27T08:00", atmosphericpressure: 80.58},
{date: "2019-09-27T08:00", lightningdistance: 0},
{date: "2019-09-27T08:00", lightningevents: 0},
{date: "2019-09-27T08:00", precipitation: 0},
{date: "2019-09-27T08:00", radiation: 829.03},
{date: "2019-09-27T08:00", relativehumidity: 0.78},
{date: "2019-09-27T08:00", temperature: 20.24},
{date: "2019-09-27T08:00", winddirection: 56.43},
{date: "2019-09-27T08:00", windgusts: 3.78},
{date: "2019-09-27T08:00", windspeed: 1.73},

{date: "2019-09-27T09:00", atmosphericpressure: 80.5},
{date: "2019-09-27T09:00", lightningdistance: 0},
{date: "2019-09-27T09:00", lightningevents: 0},
{date: "2019-09-27T09:00", precipitation: 0},
{date: "2019-09-27T09:00", radiation: 739.98},
{date: "2019-09-27T09:00", relativehumidity: 0.74},
{date: "2019-09-27T09:00", temperature: 20.82},
{date: "2019-09-27T09:00", winddirection: 52.83},
{date: "2019-09-27T09:00", windgusts: 2.95},
{date: "2019-09-27T09:00", windspeed: 1.54}]

const result = [];
list.forEach(i => {
  let x = result.find(r => r.date === i.date);
  if(x) {
    Object.assign(x, i);
  } else {
    result.push(i);
  }
});
console.log(result);

0
投票

问题:

您将在每次迭代中为所有对象属性分配值。在每次迭代中,您将获得单个属性的值。所有其他值都是不确定的。因此,剩余的值每次都会被undefined覆盖。

解决方法

不是手动分配所有值,而是使用temp[index][Object.keys(obj)[1]] = Object.values[obj][1])

我使用一个函数来减少一些代码。

代码是

let temp=[{},{}];
function addData(pos,obj){
  temp[pos][Object.keys(obj)[1]] = Object.values(obj)[1];
}
list.forEach((o) => {
 if(o.date == "2019-09-27T08:00"){
  temp[0]["date"] = o.date;
  window.addData(0,o);
 }
 else
 if(o.date == "2019-09-27T09:00"){
  temp[1]["date"] = o.date;
  window.addData(1,o);
 }
});
console.log(temp)

函数addData会将属性分配给给定温度下给定索引的值。

由于您在这里使用了一些常量值,因此我在代码中也将它们用作常量。如果不是这种情况,则可以使用变量并在数组中动态初始化空对象。

var list = [{date: "2019-09-27T08:00", atmosphericpressure: 80.58},
{date: "2019-09-27T08:00", lightningdistance: 0},
{date: "2019-09-27T08:00", lightningevents: 0},
{date: "2019-09-27T08:00", precipitation: 0},
{date: "2019-09-27T08:00", radiation: 829.03},
{date: "2019-09-27T08:00", relativehumidity: 0.78},
{date: "2019-09-27T08:00", temperature: 20.24},
{date: "2019-09-27T08:00", winddirection: 56.43},
{date: "2019-09-27T08:00", windgusts: 3.78},
{date: "2019-09-27T08:00", windspeed: 1.73},
{date: "2019-09-27T09:00", atmosphericpressure: 80.5},
{date: "2019-09-27T09:00", lightningdistance: 0},
{date: "2019-09-27T09:00", lightningevents: 0},
{date: "2019-09-27T09:00", precipitation: 0},
{date: "2019-09-27T09:00", radiation: 739.98},
{date: "2019-09-27T09:00", relativehumidity: 0.74},
{date: "2019-09-27T09:00", temperature: 20.82},
{date: "2019-09-27T09:00", winddirection: 52.83},
{date: "2019-09-27T09:00", windgusts: 2.95},
{date: "2019-09-27T09:00", windspeed: 1.54},
{date: "2019-09-27T10:00", atmosphericpressure: 80.37},
{date: "2019-09-27T10:00", lightningdistance: 0},
{date: "2019-09-27T10:00", lightningevents: 0},
{date: "2019-09-27T10:00", precipitation: 0},
{date: "2019-09-27T10:00", radiation: 662.45},
{date: "2019-09-27T10:00", relativehumidity: 0.69},
{date: "2019-09-27T10:00", temperature: 21.64},
{date: "2019-09-27T10:00", winddirection: 68.55},
{date: "2019-09-27T10:00", windgusts: 2.59},
{date: "2019-09-27T10:00", windspeed: 1.17},
{date: "2019-09-27T11:00", atmosphericpressure: 80.3},
{date: "2019-09-27T11:00", lightningdistance: 0},
{date: "2019-09-27T11:00", lightningevents: 0},
{date: "2019-09-27T11:00", precipitation: 0},
{date: "2019-09-27T11:00", radiation: 292.93},
{date: "2019-09-27T11:00", relativehumidity: 0.66},
{date: "2019-09-27T11:00", temperature: 21.31},
{date: "2019-09-27T11:00", winddirection: 47.26},
{date: "2019-09-27T11:00", windgusts: 2.74},
{date: "2019-09-27T11:00", windspeed: 1.24},
{date: "2019-09-27T12:00", atmosphericpressure: 80.24},
{date: "2019-09-27T12:00", lightningdistance: 0},
{date: "2019-09-27T12:00", lightningevents: 0},
{date: "2019-09-27T12:00", precipitation: 0},
{date: "2019-09-27T12:00", radiation: 168.85},
{date: "2019-09-27T12:00", relativehumidity: 0.65},
{date: "2019-09-27T12:00", temperature: 21.23},
{date: "2019-09-27T12:00", winddirection: 46.44},
{date: "2019-09-27T12:00", windgusts: 1.77},
{date: "2019-09-27T12:00", windspeed: 0.87},
{date: "2019-09-27T13:00", atmosphericpressure: 80.22},
{date: "2019-09-27T13:00", lightningdistance: 0},
{date: "2019-09-27T13:00", lightningevents: 0},
{date: "2019-09-27T13:00", precipitation: 0},
{date: "2019-09-27T13:00", radiation: 133.87},
{date: "2019-09-27T13:00", relativehumidity: 0.65},
{date: "2019-09-27T13:00", temperature: 20.89},
{date: "2019-09-27T13:00", winddirection: 44.6},
{date: "2019-09-27T13:00", windgusts: 1.7},
{date: "2019-09-27T13:00", windspeed: 1.02},
{date: "2019-09-27T14:00", atmosphericpressure: 80.25},
{date: "2019-09-27T14:00", lightningdistance: 0},
{date: "2019-09-27T14:00", lightningevents: 0},
{date: "2019-09-27T14:00", precipitation: 0},
{date: "2019-09-27T14:00", radiation: 79.42},
{date: "2019-09-27T14:00", relativehumidity: 0.65},
{date: "2019-09-27T14:00", temperature: 20.56},
{date: "2019-09-27T14:00", winddirection: 48.5},
{date: "2019-09-27T14:00", windgusts: 1.79},
{date: "2019-09-27T14:00", windspeed: 0.95},
{date: "2019-09-27T15:00", atmosphericpressure: 80.3},
{date: "2019-09-27T15:00", lightningdistance: 0},
{date: "2019-09-27T15:00", lightningevents: 0},
{date: "2019-09-27T15:00", precipitation: 0},
{date: "2019-09-27T15:00", radiation: 16.2},
{date: "2019-09-27T15:00", relativehumidity: 0.7},
{date: "2019-09-27T15:00", temperature: 19.46},
{date: "2019-09-27T15:00", winddirection: 352.4},
{date: "2019-09-27T15:00", windgusts: 0.68},
{date: "2019-09-27T15:00", windspeed: 0.42},
{date: "2019-09-27T16:00", atmosphericpressure: 80.37},
{date: "2019-09-27T16:00", lightningdistance: 0},
{date: "2019-09-27T16:00", lightningevents: 0},
{date: "2019-09-27T16:00", precipitation: 0},
{date: "2019-09-27T16:00", radiation: 0},
{date: "2019-09-27T16:00", relativehumidity: 0.77},
{date: "2019-09-27T16:00", temperature: 18.43},
{date: "2019-09-27T16:00", winddirection: 333.37},
{date: "2019-09-27T16:00", windgusts: 1.73},
{date: "2019-09-27T16:00", windspeed: 0.89},
{date: "2019-09-27T17:00", atmosphericpressure: 80.41},
{date: "2019-09-27T17:00", lightningdistance: 0},
{date: "2019-09-27T17:00", lightningevents: 0},
{date: "2019-09-27T17:00", precipitation: 0},
{date: "2019-09-27T17:00", radiation: 0},
{date: "2019-09-27T17:00", relativehumidity: 0.85},
{date: "2019-09-27T17:00", temperature: 17.42},
{date: "2019-09-27T17:00", winddirection: 353.25},
{date: "2019-09-27T17:00", windgusts: 0.94},
{date: "2019-09-27T17:00", windspeed: 0.46}
];
let temp=[{},{}];
function addData(pos,obj){
  temp[pos][Object.keys(obj)[1]] = Object.values(obj)[1];
}
list.forEach((o) => {
 if(o.date == "2019-09-27T08:00"){
  temp[0]["date"] = o.date;
  window.addData(0,o);
 }
 else
 if(o.date == "2019-09-27T09:00"){
  temp[1]["date"] = o.date;
  window.addData(1,o);
 }
});
console.log(temp)
© www.soinside.com 2019 - 2024. All rights reserved.