Есть ли лучший способ установить дублирующиеся данные массива вместо использования данных [0] - PullRequest
0 голосов
/ 02 марта 2020

Каков наилучший способ рефакторинга кода и лучшая производительность? Вот что я делаю. В функции getData я запрашиваю данные из databae, используя async / await, затем получаю некрасивые данные, пытаюсь отобразить и удалить элемент, дублирующий данные

async getData({req,res}) {
    let data = await this.getData() 
    data = [
      {
          "id": 3,
          "employee_id": 2290,
          "getId": {
              "id": 9070
          },
          "getName": {
              "name": "test"
          },
      },
        {
          "id": 4,
          "employee_id": 2291,
          "getId": {
              "id": 9070
          },
          "getName": {
              "name": "test"
          },
      }
  ]  //example I await call database get data look like this

  //before I remove them I want to keep duplicate data I set new variable for keep them
  //which part is the most ugly is their anyway to do something about this ?
    const getId = data[0].getId
    const getName = data[0].getName

  // in this part I map and delete element that duplicate which is data.getName and data.getId
  // I create seperate function for code clean
    data = await this.removeElement(data)

    //after that I return response data

    return response.status(200).json({
      status: 200,
      success: true,
      getId: getId,
      getName: getName,
      data: data
  });  
}




async removeElement(data) {
  // im not sure is their any beeter way to do something like this ?
   return Promise.all(
        data.map(async item => {
            await delete item.getId;
            await delete item.getName;
            return item;
        })
    );
}

поэтому мой ответ будет выглядеть следующим образом:

 getId : {
      id : 9070
    }
    getName : {
      name : 'test'
    }
    data : [
      {
          "id": 3,
          "employee_id": 2290,
      },
        {
          "id": 4,
          "employee_id": 2291,
      }
  ]

Я очень ценю вашу помощь, спасибо

1 Ответ

1 голос
/ 02 марта 2020

Удаление свойств из объекта не является асинхронным процессом. Нет необходимости await в нем или иметь Promise.all вокруг таких al oop.

Чтобы кратко извлечь два общих свойства из первого элемента массива, вы можете выполнить деструктурирование:

const { getId, getName } = data[0];

Сокращенные имена свойств тоже помогут. В целом:

const data = await this.getData();
const { getId, getName } = data[0];
const trimmedData = data.map(({ id, employee_id }) => ({ id, employee_id }));
return response.status(200).json({
  status: 200,
  success: true,
  getId,
  getName,
  data: trimmedData
});

data.map(({ id, employee_id }) => ({ id, employee_id })) принимает массив и создает новый массив объектов, который содержит только свойства id и employee_id в исходных объектах.

Если вам нужно черный список свойств, а не извлекать нужные свойства, тогда вы можете сделать что-то похожее на описанное выше с синтаксисом rest:

const trimmedData = data.map(({ getId, getName, ...rest }) => rest);
...