Моя відповідь багато в чому базується на найбільш рейтинговій відповіді тут, і, сподіваємось, всі розуміють (є те саме пояснення і на моєму GitHub). Ось чому його імплементація з картою працює:
Object.keys(images).map((key) => images[key] = 'url(' + '"' + images[key] + '"' +
')');
Мета функції - взяти об'єкт і змінити оригінальний вміст об'єкта, використовуючи метод, доступний для всіх об'єктів (об'єктів і масивів), не повертаючи масив. Практично все в межах JS є об'єктом, і з цієї причини елементи, що перебувають далі за контуром успадкування, можуть технічно використовувати ті, які доступні тим, хто знаходиться в межах лінії (і зворотній вид, як видається).
Причина цього працює через те, що функції .map повертають масив ВИМОГА, що ви надаєте явне або неявне ПОВЕРНЕННЯ масиву замість того, щоб просто змінювати існуючий об'єкт. Ви по суті обманюєте програму думати, що об'єкт - це масив, використовуючи Object.keys, який дозволить вам використовувати функцію map, впливаючи на значення, з якими пов'язані окремі клавіші (я фактично випадково повернув масиви, але виправив його). Поки не буде повернення в нормальному сенсі, не буде створений масив з оригінальним об'єктом стилю неушкодженим і модифікований як запрограмовано.
Ця конкретна програма приймає об'єкт, який називається зображенням, і приймає значення його ключів і додає теги URL для використання в іншій функції. Оригінал цього:
var images = {
snow: 'https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305',
sunny: 'http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-east-
Matanzas-city- Cuba-20170131-1080.jpg',
rain: 'https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg' };
... і змінено це:
var images = {
snow: url('https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305'),
sunny: url('http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-
east-Matanzas-city- Cuba-20170131-1080.jpg'),
rain: url('https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg')
};
Початкова структура об'єкта залишається недоторканою, що забезпечує нормальний доступ до власності, доки не буде повернення. НЕ потрібно, щоб він повертав масив, як звичайний, і все буде добре. Мета - ПРИЗНАЧЕННЯ вихідних значень (зображень [клавіша]) потрібному, а не іншому. Наскільки я знаю, для того, щоб запобігти виведенню масиву, МОЖЕ бути ПОВЕРХНЕННЯ зображень [key] і жодних неявних чи явних запитів повернути масив (змінне призначення робить це і мені глючить туди-сюди).
Редагувати:
Зверніться до свого іншого методу щодо створення нового об'єкта, щоб уникнути зміни оригінального об'єкта (і перепризначення, як видається, все ще необхідно, щоб уникнути випадкового створення масиву як виводу). Ці функції використовують синтаксис стрілок і є, якщо ви просто хочете створити новий об’єкт для подальшого використання.
const mapper = (obj, mapFn) => Object.keys(obj).reduce((result, key) => {
result[key] = mapFn(obj)[key];
return result;
}, {});
var newImages = mapper(images, (value) => value);
Спосіб роботи цих функцій виглядає так:
mapFn приймає функцію, яка буде додана пізніше (у цьому випадку (value) => значення) і просто повертає все, що зберігається там, як значення для цього ключа (або помножене на два, якщо ви зміните значення повернення, як він) у mapFn ( obj) [ключ],
а потім переосмислює початкове значення, пов’язане з ключем у результаті [key] = mapFn (obj) [key]
і повертає операцію, виконану за результатом (акумулятор, розташований у дужках, ініційований в кінці функції .reduce).
Все це виконується на обраному об'єкті, і НАЙКОГО НЕ МОЖЕ бути неявним запитом для повернутого масиву і працює лише при переназначенні значень, наскільки я можу сказати. Для цього потрібна розумова гімнастика, але скорочуються рядки коду, необхідні, як видно вище. Вихід точно такий, як видно нижче:
{snow: "https://www.trbimg.com/img-5aa059f5/turbine/bs-
md-weather-20180305", sunny: "http://www.cubaweather.org/images/weather-
photos/l…morning-east-Matanzas-city-Cuba-20170131-1080.jpg", rain:
"https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg"}
Майте на увазі, що це працювало з NON-NUMBERS. ВИ МОЖЕТЕ дублювати будь-який об’єкт, ПРОСТИЙ ПОВЕРНЕННЯ ЗНАЧЕННЯ у функції mapFN.
Object.keys
, що не має чітко визначеного порядку. Це може бути проблематично, я пропоную використовуватиObject.getOwnPropertyNames
замість цього.