Отфильтруйте отношение данных на JavaScript - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть данные о переменной здесь:

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

, и я пытаюсь фильтровать данные, когда я устанавливаю сообщение FID. Требуемое свойство результата - Provinsi.

Пример. Когда я устанавливаю сообщение FID = 20, результатом является Сурабая.

Это то, что я делаю сейчас:

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

Я хотел бы найти оптимизированный способ сделать это, потому что есть много данных. Любое предложение сделать это?

if (message.includes(ask)) {
    respon.text = answer
}

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Ваши данные не имеют допустимого формата, вы можете, например, использовать вместо этого массив, например:

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

, а затем отфильтровать и отобразить, чтобы получить все "Provinsi":

let fid = 20;
data.filter(obj => obj.FID === fid).map(result => result.Provinsi); // ['Surabaya']
0 голосов
/ 01 апреля 2020

Данные, которые вы разместили, не имеют допустимого формата. Я предполагаю, что вам нужен массив, и в этом случае ваши данные должны быть структурированы следующим образом:

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

Теперь, с данными в этом формате, мы можем взглянуть на массив .prototype.filter function.

Используя эту функцию filter, вы можете написать свою собственную функцию и делать то, что вы хотите:

/**
 * 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;
}

, и теперь вы можете делать то, что хотите :

respon.text = getProvinsiForMessage(data, message);
0 голосов
/ 01 апреля 2020

Вы можете использовать следующий синтаксис. Вы можете изучить оператор стрелки, чтобы лучше это понять.

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

Обратите внимание, что вам нужно обработать условие, когда значение не найдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...