Открийте скритите тайни на операциите за изтриване в JavaScript. Тази статия предоставя 20 въпроса за подобряване на уменията ви. Нека издигнем експертния опит в кодирането!

Извършването на операции за изтриване е решаващ аспект от работата с масиви и обекти в JavaScript. От съществено значение е да имате солидно разбиране на различните налични техники и методи за ефективно изтриване на елементи. В тази статия ще разгледаме 20 трудни въпроса за интервю, които се фокусират върху извършването на операции за изтриване в JavaScript. Всеки въпрос ще представи кодов фрагмент и ние ще предоставим подробно обяснение на поведението и изхода на фрагмента.

Въпрос 1:

let array = [1, 2, 3, 4, 5];
delete array[2];
console.log(array); // Output: [1, 2, undefined, 4, 5]

Обяснение: В дадения кодов фрагмент ключовата дума delete се използва за изтриване на елемент под индекс 2 в array. Въпреки това, вместо да премахне елемента, той задава стойността на този индекс на undefined. В резултат на това array запазва оригиналната дължина, но със стойност undefined в изтрития индекс.

Въпрос 2:

let array = [1, 2, 3, 4, 5];
array.splice(2, 1);
console.log(array); // Output: [1, 2, 4, 5]

Обяснение:В този кодов фрагмент методът splice() се използва за изтриване на един елемент от array, започващ от индекс 2. Първият аргумент указва началния индекс, а вторият аргумент (1) указва броя на елементи за премахване. След изтриването полученото array съдържа [1, 2, 4, 5].

Въпрос 3:

let array = [1, 2, 3, 4, 5];
let deletedItem = array.shift();
console.log(array); // Output: [2, 3, 4, 5]
console.log(deletedItem); // Output: 1

Обяснение: Методът shift() премахва първия елемент от масив и връща премахнатия елемент. В дадения кодов фрагмент първият елемент (1) се премахва от array, който след това се актуализира до [2, 3, 4, 5]. Премахнатият елемент (1) се съхранява в променливата deletedItem.

Въпрос 4:

let array = [1, 2, 3, 4, 5];
array.length = 3;
console.log(array); // Output: [1, 2, 3]

Обяснение:Като зададете свойството length на масив, можете ефективно да изтриете елементи извън определената дължина. В предоставения кодов фрагмент length на array е зададено на 3, което води до премахването на последните два елемента. Полученото array съдържа [1, 2, 3].

Въпрос 5:

let array = [1, 2, 3, 4, 5];
let newArray = array.filter((item) => item !== 3);
console.log(newArray); // Output: [1, 2, 4, 5]

Обяснение: Използвайки метода filter(), можете да създадете нов масив, който изключва конкретни елементи въз основа на дадено условие. В кодовия фрагмент методът filter() филтрира елемента 3 от array, което води до нов масив (newArray), който съдържа [1, 2, 4, 5].

Въпрос 6:

let object = { a: 1, b: 2, c: 3 };
delete object.b;
console.log(object); // Output: { a: 1, c: 3 }

Обяснение: Ключовата дума delete може също да се използва за премахване на свойства от обекти. В предоставения кодов фрагмент свойството b се изтрива от object. В резултат на това актуализираният object съдържа { a: 1, c: 3 }.

Въпрос 7:

let object = { a: 1, b: 2, c: 3 };
object.b = undefined;
console.log(object); // Output: { a: 1, b: undefined, c: 3 }

Обяснение: Присвояването на undefined на свойство ефективно премахва стойността, но запазва самото свойство. В кодовия фрагмент стойността на свойството b в object е зададена на undefined. Полученото object съдържа { a: 1, b: undefined, c: 3 }.

Въпрос 8:

let object = { a: 1, b: 2, c: 3 };
let { b, ...newObject } = object;
console.log(newObject); // Output: { a: 1, c: 3 }

Обяснение: Използвайки синтаксиса за деструктуриране на обект и оператора rest (...), можете да създадете нов обект (newObject), който изключва конкретни свойства. В предоставения кодов фрагмент свойството b е изключено, което води до нов обект (newObject), съдържащ { a: 1, c: 3 }.

Въпрос 9:

let object = { a: 1, b: 2, c: 3 };
Object.keys(object).forEach((key) => {
  if (key !== 'b') {
    delete object[key];
  }
});
console.log(object); // Output: { b: 2 }

Обяснение: Чрез итерация върху ключовете на обект, използвайки Object.keys() и метода forEach(), можете избирателно да изтриете свойства. В предоставения кодов фрагмент всички свойства с изключение на b се изтриват от object. В резултат на това object съдържа само свойството b със съответната му стойност.

Въпрос 10:

let object = { a: 1, b: 2, c: 3 };
let keyToDelete = 'b';
let { [keyToDelete]: deletedValue, ...newObject } = object;
console.log(newObject); // Output: { a: 1, c: 3 }
console.log(deletedValue); // Output: 2

Обяснение: Използвайки имена на динамични свойства и деструктуриране на обект, можете избирателно да изтриете свойства от обект. В предоставения кодов фрагмент свойството, указано от keyToDelete ('b'), е изключено, което води до нов обект (newObject), който съдържа { a: 1, c: 3 }. Изтритата стойност (2) се съхранява в променливата deletedValue.

Въпрос 11:

let array = [1, 2, 3, 4, 5];
array.splice(1, 2, 6, 7);
console.log(array); // Output: [1, 6, 7, 4, 5]

Обяснение: В този кодов фрагмент методът splice() се използва за изтриване на два елемента, започващи от индекс 1 в array, и вмъкване на 6 и 7 на тяхно място. Първият аргумент (1) показва началния индекс, вторият аргумент (2) определя броя на елементите за изтриване, а следващите аргументи (6 и 7) представляват елементите за вмъкване. След модификацията array става [1, 6, 7, 4, 5].

Въпрос 12:

let array = [1, 2, 3, 4, 5];
let newArray = array.slice(0, 3);
console.log(newArray); // Output: [1, 2, 3]

Обяснение: Методът slice() връща нов масив, съдържащ плитко копие на елементи от оригиналния масив. В този кодов фрагмент slice(0, 3) се използва за извличане на елементи от индекс 0 до индекс 2 (изключителен) от array. Полученото newArray съдържа [1, 2, 3].

Въпрос 13:

let object = { a: 1, b: 2, c: 3 };
let keysToDelete = ['a', 'c'];
keysToDelete.forEach((key) => delete object[key]);
console.log(object); // Output: { b: 2 }

Обяснение: Като използвате метода forEach() на масив от ключове, можете да изтриете множество свойства от обект. В този кодов фрагмент ключовете, посочени в масива keysToDelete ('a' и 'c'), се повтарят и съответните свойства се изтриват от object. В резултат на това object съдържа само свойството 'b' с неговата стойност.

Въпрос 14:

let array = [1, 2, 3, 4, 5];
let indexToDelete = 2;
array = array.filter((_, index) => index !== indexToDelete);
console.log(array); // Output: [1, 2, 4, 5]

Обяснение: Използвайки метода filter() заедно с аргумента индекс, можете да изключите елементи въз основа на техния индекс от масив. В този кодов фрагмент елементите в индекса, определен от indexToDelete (2), се филтрират, което води до нов масив без елемента 3. Модифицираното array става [1, 2, 4, 5].

Въпрос 15:

let object = { a: 1, b: 2, c: 3 };
let newObject = Object.fromEntries(
  Object.entries(object).filter(([key]) => key !== 'b')
);
console.log(newObject); // Output: { a: 1, c: 3 }

Обяснение: Чрез комбиниране на Object.entries(), filter() и Object.fromEntries() можете избирателно да създадете нов обект със свойства, изключени въз основа на условие. В този кодов фрагмент свойствата на object се преобразуват в масив от двойки ключ-стойност с помощта на Object.entries(). Методът filter() филтрира записа с ключа 'b', а Object.fromEntries() преобразува филтрирания масив обратно в обект. Полученото newObject съдържа { a: 1, c: 3 }.

Въпрос 16:

let array = [1, 2, 3, 4, 5];
array.length = 0;
console.log(array); // Output: []

Обяснение: Като зададете свойството length на масив на 0, можете ефективно да премахнете всички елементи от масива. В този кодов фрагмент length на array е зададен на 0, което води до празен масив [].

Въпрос 17:

let object = { a: 1, b: 2, c: 3 };
let newObject = Object.fromEntries(
  Object.entries(object).filter(([_, value]) => value !== 2)
);
console.log(newObject); // Output: { a: 1, c: 3 }

Обяснение: Подобно на предишния въпрос, този кодов фрагмент създава нов обект, като изключва свойства въз основа на техните стойности. Методът Object.entries() преобразува object в масив от двойки ключ-стойност. Методът filter() се прилага за изключване на записи със стойност 2 и накрая Object.fromEntries() преобразува филтрирания масив обратно в обект. Полученото newObject съдържа { a: 1, c: 3 }.

Въпрос 18:

let array = [1, 2, 3, 4, 5];
delete array[3];
console.log(array.length); // Output: 5
console.log(array[3]); // Output: undefined

Обяснение: В този кодов фрагмент ключовата дума delete се използва за изтриване на елемента с индекс 3 в array. Операторът delete обаче само задава стойността на изтрития елемент на undefined, вместо да премахва изцяло елемента. Следователно array запазва първоначалната си дължина (5), но стойността при индекс 3 е undefined.

Въпрос 19:

let object = { a: 1, b: 2, c: 3 };
delete object.d;
console.log(object); // Output: { a: 1, b: 2, c: 3 }

Обяснение: Когато използвате ключовата дума delete за свойство на обект, което не съществува, не се извършва действие и обектът остава непроменен. В този кодов фрагмент опитът за изтриване на свойството d (което не съществува) няма ефект върху object и то остава { a: 1, b: 2, c: 3 }.

Въпрос 20:

let object = { a: 1, b: 2, c: 3 };
let keyToDelete = 'b';
object[keyToDelete] = null;
console.log(object); // Output: { a: 1, b: null, c: 3 }

Обяснение:Присвояването на null на свойство на практика премахва свързаната с него стойност, но самото свойство остава в обекта. В този кодов фрагмент стойността на свойството, указано от keyToDelete ('b'), е зададено на null. В резултат на това object съдържа { a: 1, b: null, c: 3 }.

Резюме:

В тази статия проучихме 20 трудни въпроса за интервю, свързани с извършването на операции за изтриване в JavaScript. Обхванахме различни техники, методи и концепции като delete ключова дума, splice(), shift(), length манипулиране на свойства, filter(), изтриване на свойства на обекти, slice(), Object.keys() и др. Като разберете тези концепции и практикувате с кодови фрагменти, можете да засилите уменията си за работа с изтривания в JavaScript обекти и масиви. Не забравяйте да подходите внимателно към всеки въпрос, да анализирате кода и да разберете очакваните резултати.

Приятно кодиране!

Надяваме се, че горната статия даде по-добро разбиране. Ако имате въпроси относно областите, които обсъдих в тази статия, областите за подобрение, не се колебайте да коментирате по-долу.

[Разкриване: Тази статия е съвместно творение, смесващо моята собствена идея с помощта на ChatGPT за оптимална артикулация.]