2016-05-19 5 views
-2

У меня есть цикл, который я использую, чтобы изменить строку, которая выглядит как этотJavascript/JQuery сделать переменную доступной вне цикла

for (var key in streets) { 
    var re = new RegExp(key, 'gi'); 
    var address2_2 = address2.replace(re, streets[key]).replace(/\s/g, ''); 
    } 

Если я использую переменную «address2_2» внутри цикла это нормально и цикл выполняет его работу хорошо. Проблема в том, что мне нужно иметь доступ к этому за пределами цикла. Я пробовал каждую комбинацию вещей, о которых я мог думать, чтобы получить ее, как следующие фрагменты.

var address2_2 = ''; 
    for (var key in streets) { 
    var re = new RegExp(key, 'gi'); 
    address2_2 = address2.replace(re, streets[key]).replace(/\s/g, ''); 
    } 

    var address2_2 = ''; 
    for (var key in streets) { 
    var re = new RegExp(key, 'gi'); 
    address2_2 = address2.replace(re, streets[key]).replace(/\s/g, ''); 
    return address2_2; 
    } 

    for (var key in streets) { 
    var re = new RegExp(key, 'gi'); 
    window.address2_2 = address2.replace(re, streets[key]).replace(/\s/g, ''); 
    } 

Было больше комбинаций, но я не могу их запомнить. Мне просто нужно иметь возможность использовать 'address2_2' в инструкции if вне этого цикла. Любая помощь ценится, как всегда. Благодаря

Edit: Вот terrible jsfiddle я сделал быстро для тех, кто просил

Полный код что-то вроде этого

var streets = { 
    "AVE": "AVENUE", 
    "BLDG": "BUILDING", 
    "BLVD": "BOULEVARD", 
    "CIR": "CIRCLE", 
    "CLL": "CALLE", 
    "CR": "COUNTY ROAD", 
    "CTR": "CENTER", 
    "CTY": "CITY", 
    "DR": "DRIVE", 
    "EXT": "EXTENSION", 
    "FM": "FARM ROAD", 
    "HC": "HIGHWAY CONTRACT", 
    "HWY": "HIGHWAY", 
    "LN": "LANE", 
    "MT": "MOUNT", 
    "PL": "PLACE", 
    "PLZ": "PLAZA", 
    "PKWY": "PARKWAY", 
    "PT": "POINT", 
    "RD": "ROAD", 
    "RT": "ROUTE", 
    "RTE": "ROUTE", 
    "SQ": "SQUARE", 
    "SR": "STATE ROUTE", 
    "ST": "STREET", 
    "STE": "SUITE", 
    "TR": "TRAIL", 
    "WY": "WAY", 
}; 

var address2 = '850 BULL ST'; 

    for (var key in streets) { 
    re = new RegExp(key, 'gi'); 
    address2_2 = address2.replace(re, streets[key]).replace(/\s/g, ''); 
    console.log(address2_2); 
    } 
    console.log(address2_2); 
+0

Эти отрывки работают? – Akshay

+0

можете ли вы опубликовать весь код или jsfiddle? –

+0

Нет фрагментов, которые не работают. – DjH

ответ

2

В JavaScript есть только function сфера, смысл, объявить переменную внутри цикла , положите объявление переменной вне цикла автоматически.

var address2_2, // undefined 
    re; // undefined 

for (var key in streets) { 
    re = new RegExp(key, 'gi'); 
    address2_2 = address2.replace(re, streets[key]).replace(/\s/g, ''); 
} 

// then use it in an if else claus 
if (address2_2){ 
    // do something 
} 

EDIT:

Ну правильно, то же самое на для var key. На всякий случай вам интересно. И поэтому они привязаны к ближайшей функции или оконному объекту, если никакая функция не найдена.

EDIT 2:

также обеспечить решение, возможно, раскошелиться это fiddle

Лучше разбить адрес на пробелы, а затем сравнить с массивом. Краткое решение вашей проблемы в случае нескольких случаев ...

var streets = {/**/}, 
    input = '850 BULL ST PLZ', 
    address = input.split(' '), 
    arr = [], 
    i = 0, 
    chunk; 

for (; i < address.length; i++) { 
    chunk = streets[address[i]] || address[i]; // undefined or original 
    arr.push(chunk); 
} 

$("#loop").append(address.join('<br />')); 
$("#result").append(arr.join(' ')); 
Смежные вопросы