Ошибка в JSON. Не могу понять
Помогите, разобраться в чем проблема. Через консоль проверяю все верно срабатывает. Выводятся значения. А, через JSON идет непонятный повтор и значения не в строке как в примере. Иза чего это может быть?
/**
* Класс для работы с API
*
* @author User Name
* @version v.1.0 (dd/mm/yyyy)
*/
class Api {
constructor() {}
/**
* Заполняет строковый шаблон template данными из объекта object
*
* @author User Name
* @version v.1.0 (dd/mm/yyyy)
* @param {object} object
* @param {string} template
* @return {string}
*/
get_api_path(object, template) {
let result = '';
api_path_templates.forEach((item) => {
result += item.replace(/%(\w+)%/g, (_, str) => {
if (object[str]) {
return encodeURIComponent(object[str]);
} else {
return str;
}
});
});
console.log(result);
return result;
}
}
let user = {
id: 20,
name: 'John Dow',
role: 'QA',
salary: 100,
};
let api_path_templates = [
'/api/items/%id%/%name%',
'/api/items/%id%/%role%',
'/api/items/%id%/%salary%',
];
let api = new Api();
let api_paths = api_path_templates.map((api_path_template) => {
return api.get_api_path(user, api_path_template);
});
console.log(JSON.stringify(api_paths));
// Ожидаемый результат
let expected_result = [
'/api/items/20/John%20Dow',
'/api/items/20/QA',
'/api/items/20/100',
];
Ответы (1 шт):
Автор решения: Oliver Patterson
→ Ссылка
Вы передавали вторым параметром строку, но ее даже не использовали. Зато перебирали глобальную переменную, что не нужно делать. У @vsemozhebuty хороший ответ. Но данный лишь исправляет ваш.
/**
* Класс для работы с API
*
* @author User Name
* @version v.1.0 (dd/mm/yyyy)
*/
class Api {
constructor() {}
/**
* Заполняет строковый шаблон template данными из объекта object
*
* @author User Name
* @version v.1.0 (dd/mm/yyyy)
* @param {object} object
* @param {string} template
* @return {string}
*/
get_api_path(object, template) {
const result = template.replace(/%(\w+)%/g, (_, str) => {
if (object[str]) {
return encodeURIComponent(object[str]);
} else {
return str;
}
});
return result;
}
}
let user = {
id: 20,
name: 'John Dow',
role: 'QA',
salary: 100,
};
let api_path_templates = [
'/api/items/%id%/%name%',
'/api/items/%id%/%role%',
'/api/items/%id%/%salary%',
];
let api = new Api();
let api_paths = api_path_templates.map((api_path_template) => {
return api.get_api_path(user, api_path_template);
});
console.log(JSON.stringify(api_paths, null, 2));
// Ожидаемый результат
let expected_result = [
'/api/items/20/John%20Dow',
'/api/items/20/QA',
'/api/items/20/100',
];