exdude
@exdude

Как корректно и красиво вытащить подсвойство объекта?

Есть объект содержащий в себе города и их данные. А так же определяю местоположение клиента с помощью яндекса, и присваиваю его переменной "tow". Соответственно к данным объекта я обращаюсь через переменную 'tow'. Есть задача вывести адреса города, на страницу с существующим блоком. Пробовал через for (key in obj), в консоль выводит все корректно но на саму страничку только один адрес. Как это можно исправить?

let tow = '';
ymaps.ready(init);

        function init() {
            ymaps.geolocation.get({
                provider: 'yandex',
                autoReverseGeocode: true
            }).then(function (result) {
	       tow = (result.geoObjects.get(0).properties.get('metaDataProperty.GeocoderMetaData.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName'));
            });
        };


let city = {
	Neftekamsk: {
		town: 'Москва',
		coin: 38,
		numHead: '8(800) 2000-600',
		mail: 'puk@mail.com',
		numOne: '35',
		numTwo: '40',
		numThree: '45',
		adress: {
			adOne: 'Ул. Пушкина',
			adTwo: 'Ул. Петрушкина',
			adThree: 'г. Глушкино',
		}
	},
		Moscow: {
		town: 'Санкт-Петербург',
		coin: 38,
		numHead: '8(800) 2000-600',
		mail: 'kek@mail.com',
		numOne: '35',
		numTwo: '40',
		numThree: '45',
		adress: {
			adOne: 'Ул. Пушкина',
			adTwo: 'Ул. Петрушкина',
		}
	},
}


function rusToLatin ( str ) {
    
    var ru = {
        'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 
        'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i', 
        'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 
        'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 
        'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 
        'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'u', 'я': 'ya'
    }, n_str = [];
    
    str = str.replace(/[ъь]+/g, '').replace(/й/g, 'i');
    
    for ( var i = 0; i < str.length; ++i ) {
       n_str.push(
              ru[ str[i] ]
           || ru[ str[i].toLowerCase() ] == undefined && str[i]
           || ru[ str[i].toLowerCase() ].replace(/^(.)/, function ( match ) { return match.toUpperCase() })
       );
    }
    
    return n_str.join('');
}





let discrMap = function() {
	for (let adStre in city[rusToLatin(tow)].adress) {
		document.getElementById('adresscity').innerHTML = '<div style="margin-left: 45px;"><a class="Ltext">' + city[rusToLatin(tow)].adress[adStre] +'</a><hr/><br/></div>';
		console.log(city[rusToLatin(tow)].adress[adStre]);
		
	}
}
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@vladdimir
Верстальщик
Вы на каждом цикле перезаписываете содержимое document.getElementById('adresscity').innerHTML
Или конкатенируйте с прошлым содержимым или в цикле готовьте данные и их уже вставляйте в ноду

Лучше подготовить данные, сложить их в перменную все, тем же циклом например, а потом уже вставлять. Чтобы зря не вызывать ререндеринг дома
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы