2016-11-17 4 views
0

Я пытаюсь собрать маршрутизатор регулярных выражений, который включает произвольное количество слизней и значений ключа.Конкатенация строки внутри определения объекта javascript

Я делаю это, создавая объект шаблонов и их соответствующие модули и затем сопоставляя регулярное выражение с модулем.

Но JavaScript выдает сообщение об ошибке, когда я использую оператор «+», чтобы объединить строки внутри определения объекта.

// URI PATTERNS 
var SLUG ='\/[a-z|A-Z|0-9|-]+)([\/]{0,1})?'; 
var KEYS ='\/?(\?.*)?$/'; 

// ROUTES 
var routes = { 

    '\/public\/images' + KEYS    : 'images', /* <-- ERROR: '+' Unexpected token */ 
    '\/public\/other' + SLUG + KEYS : 'something-else', 

}; 

Почему эта ошибка возникает и как я могу объединить эти значения за пределами хранения их в отдельных переменных?

+0

Объект должен иметь ** название свойства ** и присвоенное ему значение. Вы можете получить доступ к значению в объекте по его свойству. Это то, что вам не хватает –

+0

. Имена свойств должны быть объединенными строками, а значениями будут модули (изображения и т. Д.) – yevg

+1

О, я .. Я упустил это. Вам просто нужно использовать '[]' для добавления значений свойств. Подобно простому маршруту, равному объекту, например 'routes = {}', вы можете сделать «маршруты [ваша логика конкатенации] =« изображения »;' –

ответ

2

// URI PATTERNS 
 
var SLUG = '\/[a-z|A-Z|0-9|-]+)([\/]{0,1})?'; 
 
var KEYS = '\/?(\?.*)?$/'; 
 

 
// ROUTES 
 
var routes = {}; 
 

 
function addRoute(keyParts, value){ 
 
    routes[keyParts.join('')] = value; 
 
} 
 

 
addRoute(['\/public\/images', KEYS], 'images'); 
 
addRoute(['\/public\/other', SLUG, KEYS], 'something-else'); 
 

 
console.log(routes);

+0

должен использовать функцию join(). Спасибо! – yevg

1

Как об этом решении. Надеюсь, поможет!

var SLUG ='\/[a-z|A-Z|0-9|-]+)([\/]{0,1})?'; 
 
var KEYS ='\/?(\?.*)?$/'; 
 

 
function obj(){ 
 
    obj=new Object(); 
 
    this.add=function(key,value){ 
 
     obj[key]=value; 
 
    } 
 
    this.obj=obj 
 
} 
 

 
routes=new obj(); 
 
routes.add(['\/public\/images'+ KEYS], 'images'); 
 
routes.add(['\/public\/other' + SLUG + KEYS],'something-else'); 
 

 
console.log(routes.obj);

+0

В чем причина «+» + «+»? Почему вы создаете новый объект внутри конструктора, когда можете просто сказать 'this.add = function (key, value) {this [key] = value; } '? –

0

Используйте вычислен имена свойств:

var routes = { 
    [`\/public\/images${KEYS}`]: 'images', 

Вышесказанное также использует литералы шаблона ES6.

Смежные вопросы