我的回复很大程度上基于此处获得最高评分的回复,希望每个人都能理解(在我的GitHub上也有相同的解释)。这就是为什么他对地图的重视:
Object.keys(images).map((key) => images[key] = 'url(' + '"' + images[key] + '"' +
')');
该函数的目的是使用一个对象并使用可用于所有对象(对象和数组之类)的方法修改该对象的原始内容,而无需返回数组。JS中的几乎所有东西都是一个对象,因此,在继承流程中更远的元素可以在技术上潜在地使用那些对继承人可用的元素(并且出现相反的情况)。
之所以可行,是因为.map函数返回一个数组,要求您提供数组的显式或隐式RETURN,而不是简单地修改现有对象。实际上,您可以通过使用Object.keys欺骗程序,使该对象认为该对象是一个数组,这将允许您使用map函数及其对各个键所关联的值的作用(我实际上不小心返回了数组,但已将其修复)。只要没有正常意义上的回报,就不会创建具有原始对象stil完整且未按编程方式进行修改的数组。
这个特定的程序接受一个称为图像的对象,并获取其键的值,并附加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')
};
只要没有返回值,对象的原始结构就保持原样,允许常规属性访问。不要像正常一样返回一个数组,一切都会好起来的。目标是将原始值(images [key])重新分配给所需的内容,而不是其他任何内容。据我所知,为了防止数组输出,必须重新分配images [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)=> value),并简单地返回在mapFn()中存储的任何内容作为该键的值(如果像他一样更改返回值,则乘以2)。 obj)[key],
然后在result [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
改为使用。