如何将对象合并为一个字符串
How to merge objects into one string
假设我有一个这样的对象
```
{
"ListOfStudents": {
"-LTzCztVLA0PW-duF-3e": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "present"
}
}
}
},
"-LTz15VLA0PW-duF-123": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
},
"-LTz15VL515W-duF-163": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "absent"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
}
}
}
```
这是我的代码
const names = 'Albert,John,Alex';
saveCSVFile(data) {
const { classUID } = data;
const { currentUser } = firebase.auth();
const student = [];
firebase
.database()
.ref(`/users/${currentUser.uid}/ClassAttendance/${classUID}/ListOfStudents`)
.on('value', snapshot1 => {
snapshot1.forEach(child => {
student.push(child.val().StudentInfo);
const keys = Object.keys(child.val().StudentInfo.csvTestFile);
const dates = keys.map(key => child.val().StudentInfo.csvTestFile[key]);
console.log(dates);
});
});
}
Here's the console log output
我想要的是将 'attendanceStatus' 合并到一个字符串中,但是对于每个第一个对象,我想将每个名称放入字符串中,对于每个最后一个对象,我想把 '\n' 和 , (逗号)用于每个 attendanceStatus.
字符串中的预期最终输出:
'Albert,present,absent,present\n
John,present,absent,absent\n
Alex,absent,absent,absent\n'
或者输出可能是这样的
'Albert,present,absent,present\nJohn,present,absent,absent\nAlex,absent,absent,absent\n'
一周以来我一直在思考如何做到这一点,但没有成功。请帮助
我不确定这是否是您想要的,但我希望这能让您走上正轨。
let list = {
"-LTzCztVLA0PW-duF-3e": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "present"
}
}
}
},
"-LTz15VLA0PW-duF-123": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
},
"-LTz15VL515W-duF-163": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "absent"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
}
},
result = "";
for(let s in list) {
let c = list[s].StudentInfo.csvTestFile; //get the object with the dates
for(let d in c) {
result += c[d].attendanceStatus + ','; //add the status with a comma
}
result = result.slice(0, result.length -1); //remove the trailling comma
result += '\n'; //add a newline char for every student
}
console.log(result); //yay
下面是使用 map 的实现:
let list = {
"-LTzCztVLA0PW-duF-3e": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "present"
}
}
}
},
"-LTz15VLA0PW-duF-123": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
},
"-LTz15VL515W-duF-163": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "absent"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
}
}
const names = 'Albert,John,Alex';
let resultString = Object.keys(list).map((l, index) => {
let csvTestFiles = list[l].StudentInfo.csvTestFile;
return Object.keys(csvTestFiles).map((i, innerIndex) => {
let str = innerIndex === 0 ? `${names.split(',')[index]},` : '';
return str + csvTestFiles[i].attendanceStatus;
}).join(',');
}).join('\n').concat('\n'); // replace with '\n' if you want the new line instead, concat is just appending last '\n' to the string
console.log(resultString);
假设我有一个这样的对象
```
{
"ListOfStudents": {
"-LTzCztVLA0PW-duF-3e": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "present"
}
}
}
},
"-LTz15VLA0PW-duF-123": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
},
"-LTz15VL515W-duF-163": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "absent"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
}
}
}
```
这是我的代码
const names = 'Albert,John,Alex';
saveCSVFile(data) {
const { classUID } = data;
const { currentUser } = firebase.auth();
const student = [];
firebase
.database()
.ref(`/users/${currentUser.uid}/ClassAttendance/${classUID}/ListOfStudents`)
.on('value', snapshot1 => {
snapshot1.forEach(child => {
student.push(child.val().StudentInfo);
const keys = Object.keys(child.val().StudentInfo.csvTestFile);
const dates = keys.map(key => child.val().StudentInfo.csvTestFile[key]);
console.log(dates);
});
});
}
Here's the console log output
我想要的是将 'attendanceStatus' 合并到一个字符串中,但是对于每个第一个对象,我想将每个名称放入字符串中,对于每个最后一个对象,我想把 '\n' 和 , (逗号)用于每个 attendanceStatus.
字符串中的预期最终输出:
'Albert,present,absent,present\n
John,present,absent,absent\n
Alex,absent,absent,absent\n'
或者输出可能是这样的
'Albert,present,absent,present\nJohn,present,absent,absent\nAlex,absent,absent,absent\n'
一周以来我一直在思考如何做到这一点,但没有成功。请帮助
我不确定这是否是您想要的,但我希望这能让您走上正轨。
let list = {
"-LTzCztVLA0PW-duF-3e": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "present"
}
}
}
},
"-LTz15VLA0PW-duF-123": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
},
"-LTz15VL515W-duF-163": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "absent"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
}
},
result = "";
for(let s in list) {
let c = list[s].StudentInfo.csvTestFile; //get the object with the dates
for(let d in c) {
result += c[d].attendanceStatus + ','; //add the status with a comma
}
result = result.slice(0, result.length -1); //remove the trailling comma
result += '\n'; //add a newline char for every student
}
console.log(result); //yay
下面是使用 map 的实现:
let list = {
"-LTzCztVLA0PW-duF-3e": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "present"
}
}
}
},
"-LTz15VLA0PW-duF-123": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "present"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
},
"-LTz15VL515W-duF-163": {
"StudentInfo": {
"csvTestFile": {
"2018-12-18": {
"attendanceDate": "2018-12-18",
"attendanceStatus": "absent"
},
"2018-12-19": {
"attendanceDate": "2018-12-19",
"attendanceStatus": "absent"
},
"2018-12-20": {
"attendanceDate": "2018-12-20",
"attendanceStatus": "absent"
}
}
}
}
}
const names = 'Albert,John,Alex';
let resultString = Object.keys(list).map((l, index) => {
let csvTestFiles = list[l].StudentInfo.csvTestFile;
return Object.keys(csvTestFiles).map((i, innerIndex) => {
let str = innerIndex === 0 ? `${names.split(',')[index]},` : '';
return str + csvTestFiles[i].attendanceStatus;
}).join(',');
}).join('\n').concat('\n'); // replace with '\n' if you want the new line instead, concat is just appending last '\n' to the string
console.log(resultString);