#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
});
}
});
}