Было бы здорово, если бы вы могли просто сравнить два массива вот так:
[1,2,3] === [1,2,3]
Это было бы прекрасно! Но, к сожалению, это невозможно, потому что массивы на самом деле являются объектами в javascript. Примитивные типы можно сравнивать по их значению в javascript, например строкам и целым числам. Однако объекты являются более сложными типами и сравниваются по их ссылке или месту, где они хранятся в памяти. Таким образом, каждый раз, когда объект создается, ему дается ссылка на место, где он хранится. Таким образом, даже если объект может выглядеть идентично, его ссылка - нет.
Итак, что это значит для нас, когда мы пытаемся сравнить два массива?
Это означает, что мы не можем просто сравнивать их в упор, как мы пытались сделать выше. Нам нужно будет посмотреть на каждый отдельный элемент в массиве и сравнить его с каждым отдельным элементом другого массива.
При сравнении двух массивов самый простой способ узнать, не совпадают ли они, - это сравнить их длину. Итак, мы начнем с создания нашего метода, который выглядит так:
function compareTwoArrays(arr1, arr2) { if (arr1.length === arr2.length) { return false } }
Если это правда, наши массивы определенно не идентичны, и мы можем выйти из нашей функции и вернуть false
.
Следующее, на что мы хотим обратить внимание, это то, равен ли каждый элемент в arr1
каждому элементу в arr2
. Для этого нам нужно будет перебирать наши массивы и сравнивать каждый элемент, который в нашем случае является целым числом, а целые числа являются примитивными типами в javascript, и их можно сравнивать!
function compareTwoArrays(arr1, arr2) { if (arr1.length !== arr2.length) { return false } else { for (let i = 0; i < arr1.length; i++){ if (arr1[i] !== arr2[i]){ return false } else { continue } } } return true }
Если наш номер в arr1[i]
не равен числу в том же индексе arr2
, мы знаем, что это не совпадение, и поэтому мы возвращаем false
и выходим из цикла. Если это совпадение, мы продолжаем нашу итерацию до следующего индекса. Как только i
не будет длиннее, чем длина нашего массива, а наш оператор if
никогда не будет равен true
, мы завершаем наш цикл, переходим к последней строке нашей функции и возвращаем true
.
Таким образом, это не так просто, как просто использовать оператор ===
, но он выполняет свою работу!