Будет ли порядок вставки для массива каждый раз изменяться после выполнения карты

#arrays #typescript

Вопрос:

Если у меня есть массив, и я хочу вызвать функцию map() для этого массива. Будет ли когда-нибудь результат, возвращаемый с карты, иметь порядок, отличный от массива?

 const array = [1,2,3,4,5,6,7,8,9];
const mappedArray = array.map((num) => {
   return num * num;
})
console.log(mappedArray);
 

Отображенный массив когда-либо будет [1,4,9,16,25,36,49,64,81]
или возможно, что он изменится на что-то другое (не в том же порядке)?

Что делать, если я сделаю вызов API внутри карты, как показано ниже

 const mappedArray = array.map(async (num) => {
   return await api(num);
})

// remote API
function api(num) {
   return dynamoDbClient.getItem(num);
}
 

Комментарии:

1. Я не думаю, что вы имеете в виду «порядок вставки». Если вы напишете const array = [1, 2, 3, 4, 5, 6, 7]; array[8] = 9; array[7] = 8; порядок вставки не такой же, как порядок индексов… так как вы вставляете 9 их до того, как вставляете 8 .

Ответ №1:

Нет, map всегда будет перебирать массив по порядку. Если массив не будет изменен в другом месте вашего кода, порядок результирующего массива не изменится. Результат всегда будет одинаковым, если входные данные одинаковы.

Запустите этот код 1000 раз, и массив каждый раз будет одним и тем же.

 const array = [1,2,3,4,5,6,7,8,9];
const mappedArray = array.map((num) => {
   return num * num;
})
console.log(mappedArray); 

Комментарии:

1. Что делать, если это похоже на это const mappedArray = array.map(асинхронный (num) => { ожидание возврата ApiCall(num) })

2. Это зависит от результатов api. apiCall Возвращает ли каждый раз одно и то же значение? Если это так, то карта будет каждый раз возвращать один и тот же результат.

3. Если api, например, получает результаты из MySQL без их упорядочения, то может возникнуть ситуация, когда вызов api может не возвращать согласованный массив.

4. ApiCall-это что-то вроде получения записи из динамической базы данных в соответствии с входным номером.

5. Использование асинхронности не приведет к изменению массива