#javascript
#javascript
Вопрос:
Я нашел этот фрагмент, и он глубоко копирует массив javascript.
const makeCopy = (items) = items.map(item => Array.isArray(item) ? clone(item) : item);
У меня есть этот массив, из которого я делаю копию
const a = [1, 2, 3, 4, 5];
После создания копии я присваиваю ее другому массиву
const b = makeCopy(a);
Он копирует вещи правильно. Но если я скажу в файле Javascript
clone(anyArrayVar);
Javascript сообщает, что clone не определен. Почему это происходит, когда используется описанная выше функция clone(item)
.
Пожалуйста, поясните.
Комментарии:
1. Ваша исходная функция тоже не должна работать. Это должен быть рекурсивный вызов, поэтому он должен быть
makeCopy
, а неclone
.2. Где находится эта
clone
функция3.
clone
на самом деле не работает, он игнорируется, поскольку элемент никогда не является массивом. В примере элемент равен 1,2,3,4 или 5, ни один из которых не является массивом4. @Aplet123 это не рекурсивный вызов. Я проверил это. Затем я опубликовал вопрос.
5. Как упоминает @imvain2, число не является массивом. Таким
Array.isArray(item)
образом, возвращается false, и сопоставление происходит с самим числом, как и должно быть. Вашаclone()
функция никогда не вызывается. Поэтому, когда вы вызываете ее явно, неудивительно, что она терпит неудачу, поскольку она не существует.
Ответ №1:
clone
на самом деле это не работает, оно игнорируется, поскольку элемент никогда не является массивом. В примере item равен 1,2,3,4 или 5, ни один из которых не является массивом.
Вот его обновление, чтобы оно стало рекурсивным и учитывало массивы в массивах.
function makeCopy(items) {
return items.map(item => Array.isArray(item) ? makeCopy(item) : item);
}
console.log(makeCopy([1, [2, 3], 4, 5]))