Нужна функция JS которая убирает все объекты с типом additional, а для basic очки уменьшить в двое
Помогите написать функцию. Изменить нужно конкретно этот массив
const myLesson = [
{lesson: 1, type: 'basic', points: 2},
{lesson: 2, type: 'additional', points: 4},
{lesson: 3, type: 'basic', points: 6},
{lesson: 4, type: 'additional', points: 3},
{lesson: 5, type: 'basic', points: 4},
{lesson: 6, type: 'basic', points: 2},
{lesson: 7, type: 'additional', points: 2},
{lesson: 8, type: 'basic', points: 6},
{lesson: 9, type: 'basic', points: 4},
{lesson: 10, type: 'basic', points: 6},
{lesson: 11, type: 'additional', points: 5},
{lesson: 12, type: 'basic', points: 2},
{lesson: 13, type: 'additional', points: 2},
{lesson: 14, type: 'basic', points: 4},
{lesson: 15, type: 'additional', points: 1},
{lesson: 16, type: 'additional', points: 7},
];
Ответы (2 шт):
Автор решения: vsemozhebuty
→ Ссылка
Если массив небольшой и вам нужен более простой читабельный код, можно так (но массив будет перебираться два раза):
const myLesson = [
{lesson: 1, type: 'basic', points: 2},
{lesson: 2, type: 'additional', points: 4},
{lesson: 3, type: 'basic', points: 6},
{lesson: 4, type: 'additional', points: 3},
{lesson: 5, type: 'basic', points: 4},
{lesson: 6, type: 'basic', points: 2},
{lesson: 7, type: 'additional', points: 2},
{lesson: 8, type: 'basic', points: 6},
{lesson: 9, type: 'basic', points: 4},
{lesson: 10, type: 'basic', points: 6},
{lesson: 11, type: 'additional', points: 5},
{lesson: 12, type: 'basic', points: 2},
{lesson: 13, type: 'additional', points: 2},
{lesson: 14, type: 'basic', points: 4},
{lesson: 15, type: 'additional', points: 1},
{lesson: 16, type: 'additional', points: 7},
];
const myLessonProcessed = myLesson
.filter(object => object.type === 'basic')
.map(object => (object.points /= 2, object));
console.log(myLessonProcessed);
Если нужно эффективнее и можно чуть сложнее, тогда можно так (массив будет перебираться один раз):
const myLesson = [
{lesson: 1, type: 'basic', points: 2},
{lesson: 2, type: 'additional', points: 4},
{lesson: 3, type: 'basic', points: 6},
{lesson: 4, type: 'additional', points: 3},
{lesson: 5, type: 'basic', points: 4},
{lesson: 6, type: 'basic', points: 2},
{lesson: 7, type: 'additional', points: 2},
{lesson: 8, type: 'basic', points: 6},
{lesson: 9, type: 'basic', points: 4},
{lesson: 10, type: 'basic', points: 6},
{lesson: 11, type: 'additional', points: 5},
{lesson: 12, type: 'basic', points: 2},
{lesson: 13, type: 'additional', points: 2},
{lesson: 14, type: 'basic', points: 4},
{lesson: 15, type: 'additional', points: 1},
{lesson: 16, type: 'additional', points: 7},
];
const myLessonProcessed = myLesson
.reduce((array, object) => {
if (object.type === 'basic') {
object.points /= 2;
array.push(object);
}
return array;
}, []);
console.log(myLessonProcessed);
Если нужно изменить сам массив, не создавая копию, тогда можно так:
const myLesson = [
{lesson: 1, type: 'basic', points: 2},
{lesson: 2, type: 'additional', points: 4},
{lesson: 3, type: 'basic', points: 6},
{lesson: 4, type: 'additional', points: 3},
{lesson: 5, type: 'basic', points: 4},
{lesson: 6, type: 'basic', points: 2},
{lesson: 7, type: 'additional', points: 2},
{lesson: 8, type: 'basic', points: 6},
{lesson: 9, type: 'basic', points: 4},
{lesson: 10, type: 'basic', points: 6},
{lesson: 11, type: 'additional', points: 5},
{lesson: 12, type: 'basic', points: 2},
{lesson: 13, type: 'additional', points: 2},
{lesson: 14, type: 'basic', points: 4},
{lesson: 15, type: 'additional', points: 1},
{lesson: 16, type: 'additional', points: 7},
];
for (let i = 0; i < myLesson.length; i++) {
if (myLesson[i].type === 'basic') {
myLesson[i].points /= 2;
} else {
myLesson.splice(i, 1);
i--;
}
}
console.log(myLesson);
Автор решения: Александр
→ Ссылка
Для изменения текущего массива я бы сначала объявил его не const, а let. Тогда функция может выглядеть так:
let myLesson = [
{lesson: 1, type: 'basic', points: 2},
{lesson: 2, type: 'additional', points: 4},
{lesson: 3, type: 'basic', points: 6},
{lesson: 4, type: 'additional', points: 3},
{lesson: 5, type: 'basic', points: 4},
{lesson: 6, type: 'basic', points: 2},
{lesson: 7, type: 'additional', points: 2},
{lesson: 8, type: 'basic', points: 6},
{lesson: 9, type: 'basic', points: 4},
{lesson: 10, type: 'basic', points: 6},
{lesson: 11, type: 'additional', points: 5},
{lesson: 12, type: 'basic', points: 2},
{lesson: 13, type: 'additional', points: 2},
{lesson: 14, type: 'basic', points: 4},
{lesson: 15, type: 'additional', points: 1},
{lesson: 16, type: 'additional', points: 7},
];
myLesson = changeArr(myLesson)
function changeArr(arr){
return arr.filter( el => el.type !== 'additional')
.map( el => {
if (el.type === 'basic') el.points = el.points / 2
return el
})
}
console.log(myLesson)