Я создаю расширение Chrome и получаю некоторые странные результаты с отсортированными массивами. У меня есть две глобальные массивы, называемые «timearray» и «timearrayorig» (timearray - это отсортированная версия timearrayorig). В функции я устанавливаю набор значений в timearrayorig, а затем копирую весь массив в timearray и сортирую timearray. По какой-то причине это также сортирует timearrayorig. Я был бы очень признателен, если бы кто-нибудь мог объяснить, почему это так.Сортировка массива, создающая связанные массивы?
for (var i = 0; i < triparray.length; i++) {
for (var j = 0; j < trainsfeed.length; j++) {
if (trainsfeed[j].getElementsByTagName('Trip')[0].childNodes[0].nodeValue == triparray[i]) {
if (timearrayorig.length < i + 1 || timearrayorig[i] > Number(trainsfeed[j].getElementsByTagName('Scheduled')[0].childNodes[0].nodeValue)) {
timearrayorig.push(Number(trainsfeed[j].getElementsByTagName('Scheduled')[0].childNodes[0].nodeValue));
}
}
}
}
timearray = timearrayorig;
//timearray.sort();
(trainsfeed является связкой XML, разделенные сообщениями и triparray приведен список всех различных значений для «Trip» поле. Timearrayorig и timearray является самым ранним разом для каждого элемента triparray из элементов trainsfeed.)
Если я запустил этот скрипт и нашел значение timearrayorig и timearray в консоли отладки, они будут такими же, например [1365801720, 1365801180, 1365801600, 1365802800, 1365800940]. Но когда я сортирую timearray, они оба становятся [1365800940, 1365801180, 1365801600, 1365801720, 1365802800].
массива в JavaScript является ссылочным типом, так что когда вы присваиваете timearrayorig к timearray вы просто присвоить ссылку на массив, если вы хотите, чтобы скопировать его попробовать массив slice method – Givi