Почему происходит неправильный вывод двумерного массива?
function cityToCountry(city) {
    const countries = ['Казахстан', 'Россия', 'Китай', 'США'];

    let cities = [[],[],[],[]]
    array[0][0] = 'Астана';
    array[0][1] = 'Караганда';
    array[0][2] = 'Актобе';
    array[0][3] = 'Алмата';
    array[1][0] = 'Москва';
    array[1][1] = 'Новосибирск';
    array[1][2] = 'Сочи';
    array[1][3] = 'Омск';
    array[2][0] = 'Пекин';
    array[2][1] = 'Шанхай';
    array[2][2] = 'Сиань';
    array[2][3] = 'Харбин';
    array[3][0] = 'Нью-йорк';
    array[3][1] = 'Чикаго';
    array[3][2] = 'Вашингтон';
    array[3][3] = 'Даллас';

    for (let i in cities) {
        if (!cities.hasOwnProperty(i)) {
            continue;
        }

        for (let j in cities[i]) {
            if (!cities[i].hasOwnProperty(j)) {
                continue;
            }

            if (cities[i][j] === city && countries[i]) {
                return countries[i];
            }
        }
    }

    return 'Город не найден';
}

let city = prompt('Введите название города:', '');

alert(cityToCountry(city));

Я где-то прочитал ваш комментарий о том, что вам обязательно нужно использовать массивы и конкретно в таком виде, как вы их описали. На эту тему могу сказать, что вам, возможно кто-то навязывает методы решения задачи, которые изначально заставляют вас ходить кругами и писать долбанутый код. Либо вы самостоятельно хотите нарезать круги вместо того, чтобы кратчайшим способом прийти к решению.

Самый короткий путь для решения такой задачи:

const cityToCountry = {
    'Астана': 'Казахстан',
    'Караганда': 'Казахстан',
    'Актобе': 'Казахстан',
    'Алмата': 'Казахстан',
    'Москва': 'Россия',
    'Новосибирск': 'Россия',
    'Сочи': 'Россия',
    'Омск': 'Россия',
    'Пекин': 'Китай',
    'Шанхай': 'Китай',
    'Сиань': 'Китай',
    'Харбин': 'Китай',
    'Нью-йорк': 'США',
    'Чикаго': 'США',
    'Вашингтон': 'США',
    'Даллас': 'США',
};

const city = prompt('Введите название города:', '');
if (!cityToCountry.hasOwnProperty(city)) {
    alert('Такого города не найдено');
} else {
    alert(`Для города «${city}» найдена страна «${cityToCountry[city]}»`);
}

Этот код работает быстрее, и подход, который в нём используется, уменьшает количество точек отказа. Если вы всегда будете стремиться идти к цели прямыми путями, а не нарезать круги, вы лучше состоитесь, как программист. Но это дело ваше.
const countries = [
  {id: 1, name: 'Екатеринбург'},
  {id: 2, name: 'Москва'}
];

let answer = prompt('Введите название города'); 
let city = '';

for (let i = 0; i < countries.length; i++) {
  if (countries[i].name === answer) {
    city = answer;
  } 
}

city === answer ? alert(`Город: ${city}`) : alert('Город не найден');