Как объединить объекты в одну строку - PullRequest
0 голосов
/ 23 декабря 2018

Скажем, у меня есть такой объект

```
{
  "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);
    });
  });
}

Вот журнал консоливывод

Мне нужно было объединить 'ParticipanceStatus' в одну строку, но для каждого первого объекта я хочу поместить каждое имя в строку и для каждого последнего объекта, который я хочупоставить '\ n' на него и , (запятую) для каждого показателя посещаемости.

Ожидаемый конечный результат в строке:

'Альберт, присутствует, отсутствует, присутствует \ n

Джон, присутствует, отсутствует, отсутствует \ n

Алекс, отсутствует, отсутствует, отсутствует \ n'

или может быть вывод будет таким:

'Альберт, присутствует, отсутствует, присутствует \ nДжон, присутствует, отсутствует, отсутствует \ nАлекс, отсутствует, отсутствует, отсутствует \ n'

Я думал о том, как сделать это в течение недели, но не повезло.Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Вот реализация, использующая карту вместо:

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);
0 голосов
/ 23 декабря 2018

Я не уверен, что это то, о чем вы просите, но я надеюсь, что это приведет вас на правильный путь.

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
...