I have an array "languageCodes". I gotta compare the objects "ssmlGender" and "languageCodes" with the variables "genderSelected" and "languageSelected" respectively. If both are true, I have to display the corresponding "name" fields of the array. I did try two level filtering with forEach and stored the value in the Array. But, only got the empty one.
let languageCodes = [
{ languageCodes: ['es-ES'], name: 'es-ES-Standard-A', ssmlGender: 'FEMALE', naturalSampleRateHertz: 2403},
{languageCodes: ['it-IT'], name: 'it-IT-Standard-A', ssmlGender: 'MALE', naturalSampleRateHertz: 21000},
{languageCodes: ['ja-JP'], name: 'ja-JP-Standard-A', ssmlGender: 'FEMALE', naturalSampleRateHertz: 3200},
{languageCodes: ['ko-KR'], name: 'ko-KR-Standard-A', ssmlGender: 'MALE', naturalSampleRateHertz: 2330},
{languageCodes: ['en-US'], name: 'en-US-Wavenet-B', ssmlGender: 'FEMALE', naturalSampleRateHertz: 412},
{languageCodes: ['en-GB'], name: 'en-GB-Standard-A', ssmlGender: 'MALE', naturalSampleRateHertz: 8493}
];
My JavaScript Function:
function changeVoiceNameOption() {
const languageSelected = document.getElementById('languages').value;
let entriesElement = document.getElementById('entries');
entriesElement.innerHTML = '';
entriesElement.innerHTML += '<option value="" selected>Choose your option</option>'
var nameArray=[];
languageCodes.filter(( item ) => {
return item.ssmlGender.includes(genderSelected);
}).forEach(( filteredItems ) => {
filteredItems.languageCodes.forEach(( languageCode ) => {
return filteredItems.languageCodes.includes(languageSelected);
})
}).forEach(( filteredItems ) => {
entriesElement.innerHTML += `<option value="${item.name}"> ${item.name} </option>`
})
}