Как упростить этот код массива функций обновления?

#javascript #jquery #arrays

Вопрос:

У меня есть функция обновления массива, я хочу упростить этот код, если это возможно. Эта функция обновления предназначена для обновления и сравнения значения массива. Данные будут сравниваться внутри fruit_temp примера данных fruit_temp fruit_db_id is и существующего идентификатора в базе данных.

 fruit_temp = [{
    fruit_db_id: 71,
    fuit_id    : 1,
    name       : 'papaya'
  }, {
    fruit_db_id: 73,
    fuit_id    : 3,
    name       : 'apple'
  }];

 

Я получу и прочитаю значение fruit_temp, и когда он выполнит функцию обновления, он сравнит существующее и новое значение, которое будет вставлено. Это решение для этой функции обновления. Я просто хочу знать, можно ли упростить этот код или нет.

 const updateFruit = () =>
 { 
        finalFruit_temp     = [];
        let fruit            = $('#fruit').val(); //getting fruit value

        fruit = fruit.map(Number); //convert string value to integer

        fruit.map((el) =>{
            let fruitData = fruit_temp.filter((e) => e.id === el)[0]; //return index if compare true

            finalFruit_temp.push({
                "fruit_db_id"  :(fruitData == undefined) ? null : fruitData.fruit_db_id,
                "fruit_id"     :(fruitData == undefined) ? el : fruitData.id,
                "status"       :true
            });

        });

        fruit_temp.map((el) =>{
            let checkedFruit= fruit.includes(el.id);

            if(checkedFruit == false)
            {
                finalFruit_temp.push({

                "fruit_db_id"  :el.db_id,
                "fruit_id"     :el.id,
                "status"       :false

                });
            }
        

        });
    }

 

Комментарии:

1. Насколько мне известно, здесь нет ничего, что можно было бы упростить. Если вы хотите сократить, то удалите комментарии и разрывы строк в пустых строках.. Что ж, в этом вопросе здесь нет необходимости. Опять же, удалите разрывы только для 1 параметра в функции со стрелкой (el) =>{ , чтобы e => {

2. То Array.prototype.map() , что ничего не возвращает, вероятно, должно быть либо Array.prototype.forEach() или (мое предпочтение) простым for (const el of ...) { ... } циклом.

3. Мне просто интересно, почему ты можешь использовать эль. Удостоверение личности или e.id если в объекте нет идентификатора? Я вижу только фрукт_ид

Ответ №1:

Этот код кажется хорошо упрощенным, но я вижу несколько вещей, которые вы могли бы сделать, чтобы сделать его еще короче. Определение переменных в одной строке и изменение последнего оператора условия.

 const updateFruit = () => { 
  
  finalFruit_temp = [];
  let fruitData, fruit = $('#fruit').val().map(Number); 

  fruit.map((el) => {
    fruitData = fruit_temp.filter((e) => e.id === el)[0]; 
    finalFruit_temp.push({
        "fruit_db_id"  :(fruitData == undefined) ? null : fruitData.fruit_db_id,
        "fruit_id"     :(fruitData == undefined) ? el : fruitData.id,
        "status"       :true
    });
  });

  fruit_temp.map((el) => {
      if(!fruit.includes(el.id)){
          finalFruit_temp.push({
            "fruit_db_id"  :el.db_id,
            "fruit_id"     :el.id,
            "status"       :false
          });
      }
  });
}