Открийте скритите тайни на операциите за изтриване в 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 за оптимална артикулация.]