#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. Использование асинхронности не приведет к изменению массива