Mam tutaj dane o zmiennej:

const data = {FID: 11
              Kode_Provi: 31
              Provinsi: "DKI Jakarta"
             },
             {
              FID: 20
              Kode_Provi: 35
              Provinsi: "Surabaya"
              }

I próbuję filtrować dane, kiedy ustawiam FID wiadomości. Poszukiwana właściwość wyniku to Provinsi.

Przykład, kiedy ustawiam wiadomość FID = 20, wynikiem jest Surabaya.

Oto, co teraz robię:

if (message.includes(data[0].FID)) {
    respon.text = data[0].Provinsi
} else if (message.includes(data[1].FID)) {
    respon.text = data[1].Provinsi
} 

Chciałbym znaleźć zoptymalizowany sposób zrobienia tego, ponieważ jest dużo danych. Jakieś sugestie, jak to zrobić?

if (message.includes(ask)) {
    respon.text = answer
}
0
Vieri Lusen 1 kwiecień 2020, 07:36

3 odpowiedzi

Najlepsza odpowiedź

Opublikowane dane nie mają prawidłowego formatu. Domyślam się, że chcesz mieć tablicę, w takim przypadku twoje dane powinny mieć następującą strukturę:

const data = [
  {
    FID: 11,
    Kode_Provi: 31,
    Provinsi: "DKI Jakarta"
  },
  {
    FID: 20,
    Kode_Provi: 35,
    Provinsi: "Surabaya"
  }
]

Teraz, mając dane w tym formacie, możemy przyjrzeć się Array.prototype.filter.

Korzystając z tej funkcji filter, możesz napisać własną funkcję, która zrobi, co chcesz:

/**
 * This function will return null if the message can't be found in the
 * data array or if either inputs are invalid.
 */
function getProvinsiForMessage(data, message) {
  if (data && message) {
    const result = data.filter(dataEntry => message.includes(dataEntry.FID));

    return result && result.length ? result[0].Provinsi : null;
  }

  return null;
}

A teraz możesz robić, co chcesz:

respon.text = getProvinsiForMessage(data, message);
0
Mark 1 kwiecień 2020, 06:04

Możesz użyć poniższej składni. Możesz przestudiować operator strzałki, aby lepiej to zrozumieć.

respon.text = data.filter(d => message.includes(d.FID))[0].Provinsi;

Pamiętaj, że musisz zająć się warunkiem, gdy wartość nie zostanie znaleziona.

0
Sujeet Sinha 1 kwiecień 2020, 04:44

Twoje dane nie mają prawidłowego formatu, możesz na przykład użyć zamiast tego tablicy, na przykład:

const data = [
  { FID: 11, Kode_Provi: 31, Provinsi: "DKI Jakarta" },
  {
    FID: 20,
    Kode_Provi: 35,
    Provinsi: "Surabaya"
  }
];

A następnie filtruj i mapuj, aby uzyskać wszystkie „Provinsi”:

let fid = 20;
data.filter(obj => obj.FID === fid).map(result => result.Provinsi); // ['Surabaya']
0
Luís Ramalho 1 kwiecień 2020, 04:46