#javascript #node.js #angularjs #mongodb #mongoose
#javascript #node.js #angularjs #mongodb #мангуст
Вопрос:
Я должен объединить все данные в один объект. У меня есть массив объектов, каждый из которых имеет встроенный объект, например:
[
{
robots: [],
lines: [],
_id: 5f753118391fe067dcfa1c88,
shift: 'Shift A',
date: 2020-10-01T00:00:00.000Z,
rawData: {
robot1_runTime: 4989,
robot2_runTime: 6956,
robot2_waitTime: 6944,
},
createdAt: 2020-10-01T01:30:00.918Z,
updatedAt: 2020-10-01T02:47:22.107Z,
__v: 0
},
{
robots: [],
lines: [],
_id: 5f753118391fe067dcfa1c88,
shift: 'Shift A',
date: 2020-10-01T00:00:00.000Z,
rawData: {
robot1_runTime: 4989,
robot2_runTime: 6956,
robot2_waitTime: 6944,
},
createdAt: 2020-10-01T01:30:00.918Z,
updatedAt: 2020-10-01T02:47:22.107Z,
__v: 0
}
]
И я должен объединить поля во встроенном объекте rawData
с родительским объектом следующим образом:
[
{
robots: [],
lines: [],
_id: 5f753118391fe067dcfa1c88,
shift: 'Shift A',
date: 2020-10-01T00:00:00.000Z,
robot1_runTime: 4989,
robot2_runTime: 6956,
robot2_waitTime: 6944,
createdAt: 2020-10-01T01:30:00.918Z,
updatedAt: 2020-10-01T02:47:22.107Z,
__v: 0
},
{
robots: [],
lines: [],
_id: 5f753118391fe067dcfa1c88,
shift: 'Shift A',
date: 2020-10-01T00:00:00.000Z,
robot1_runTime: 4989,
robot2_runTime: 6956,
robot2_waitTime: 6944,
createdAt: 2020-10-01T01:30:00.918Z,
updatedAt: 2020-10-01T02:47:22.107Z,
__v: 0
}
]
Каждое поле во rawData
внедренном объекте должно быть полем во внешнем объекте, полностью исключая внедренный объект.
Может кто-нибудь сказать мне, как я могу это реализовать, чтобы я мог передать API другой команде?
Ответ №1:
Вот пример того, как вы могли бы объединить это вложенное свойство с родительским объектом.
let obj = {
robots: [],
lines: [],
_id: '5f753118391fe067dcfa1c88',
shift: 'Shift A',
date: '2020-10-01T00:00:00.000Z',
rawData: {
robot1_runTime: 4989,
robot2_runTime: 6956,
robot2_waitTime: 6944,
robot2_faultTime: 102,
skuLine4B_name: '0',
skuLine2_name: '32477045',
skuLine1_count: '0',
robot1_faultTime: 0,
robot1_waitTime: 4926,
dateReportingLastChange: '2020-09-30T23:14:51.400Z',
last_connection: '2020-09-30T23:14:51.400Z',
skuLine1_name: '0',
skuLine1_value: 0,
skuLine10_name: '0',
skuLine10_value: 0,
skuLine12_name: '32477213',
skuLine12_value: 77,
skuLine13_name: '32477063',
skuLine13_value: 52,
skuLine2_value: 249,
skuLine3_name: '32476914',
skuLine3_value: 1,
skuLine4A_name: '0',
skuLine4A_value: 0,
skuLine5_name: '68190192',
skuLine5_value: 6,
skuLine9_name: '0',
skuLine9_value: 0,
skuLine4B_value: 0
},
createdAt: '2020-10-01T01:30:00.918Z',
updatedAt: '2020-10-01T02:47:22.107Z',
__v: 0
}
obj = {...obj, ...obj.rawData};
delete obj.rawData;
console.log(obj);
Ответ №2:
Если вы делаете это в js, то вы могли бы сделать следующее (я предполагаю, что у вас есть массив таких объектов в dataArr
переменной):
const dataArr = [
{
robots: [],
lines: [],
_id: "5f753118391fe067dcfa1c88",
shift: 'Shift A',
date: "2020-10-01T00:00:00.000Z",
rawData: {
robot1_runTime: 4989,
robot2_runTime: 6956,
robot2_waitTime: 6944,
},
createdAt: "2020-10-01T01:30:00.918Z",
updatedAt: "2020-10-01T02:47:22.107Z",
__v: 0
},
{
robots: [],
lines: [],
_id: "5f753118391fe067dcfa1c88",
shift: 'Shift A',
date: "2020-10-01T00:00:00.000Z",
rawData: {
robot1_runTime: 4989,
robot2_runTime: 6956,
robot2_waitTime: 6944,
},
createdAt: "2020-10-01T01:30:00.918Z",
updatedAt: "2020-10-01T02:47:22.107Z",
__v: 0
}
]
dataArr.forEach(obj => {
for(const key of Object.keys(obj.rawData)){
obj[key] = obj.rawData[key];
}
delete obj.rawData;
})
console.log(dataArr);