#angular #slideshow
#angular #слайд-шоу
Вопрос:
Привет, ребята, есть ли какой-нибудь способ создать слайд-шоу в Angular, похожее на это, на следующем веб-сайте: https://americansecurestorage.com / но с ответом, где поле изображения в базе данных содержит несколько URL-адресов изображений, разделенных запятыми. Например, это ответ от сервера:
[
{"number" : "1", "2", "3"},
{"image" : "image1.png,image2.png,image3.png"},
{"text" : "someText"}
]
Или, более конкретно, как преобразовать эту часть объекта JSON в это:
imageURLs = [
{url1: 'image1.png'},
{url2: 'image2.png'},
{url3: 'image3.png'},
]
Большое спасибо.
Комментарии:
1. String.split с некоторой картой должен привести вас к этому.
2. @mhdev, почему вы хотите создать этот «странный» массив ?. вы уверены, что не хотите
imageURLs = [{url: 'image1.png'},{url: 'image2.png'},{ur3: 'image3.png'}]
? вы столкнетесь с трудностями при управлении в * ng для массива с другой структурой
Ответ №1:
Вы можете использовать следующую функцию для преобразования любой строки, разделенной запятыми, в JSON
const CSV_to_JSON = (data, delimiter = ',') => {
const titles = data.slice(0, data.indexOf('n')).split(delimiter);
return data
.slice(data.indexOf('n') 1)
.split('n')
.map(v => {
const values = v.split(delimiter);
return titles.reduce((obj, title, index) => ((obj[title] = values[index]), obj), {});
});
};
Пример использования
console.log(CSV_to_JSON('url1,url2na,bnc,d'));
// [{'url1': 'image1.png', 'url2': 'image2.png'}, {'url1': 'image3.png', 'url2': 'image4.png'}];
Ответ №2:
Если я правильно понимаю, все, что вы хотите сделать, это преобразовать строковое значение, разделенное запятыми "image1.png,image2.png,image3.png"
, в этот формат
[
{ url1: 'image1.png' },
{ url2: 'image2.png' },
{ url3: 'image3.png' }
]
Решение 1 (с использованием Array.map
)
image = 'image1.png,image2.png,image3.png';
imageURLs = image.split(",").map((x, i) => {
return { ['url' (i 1)]: x.trim() }
});
Решение 2 (с использованием Array.reduce
)
image = 'image1.png,image2.png,image3.png';
imageURLs = image.split(',').reduce((a, v, i) => {
a.push({ [`url${i 1}`] : v.trim() });
return a;
}, []);
Комментарии:
1. зачем использовать reduce, а не map?
2. Я ответил в спешке, но
map
это определенно более читаемая / более простая версия 🙂 Обновленный ответ сmap
решением.