내 답변은 대부분 여기에서 가장 높은 등급의 답변을 기반으로하며 모든 사람들이 이해하기를 바랍니다 (GitHub에 대해서도 동일한 설명이 있음). 이것이 그의 맵에 대한 그의 노력이 작동하는 이유입니다.
Object.keys(images).map((key) => images[key] = 'url(' + '"' + images[key] + '"' +
')');
이 함수의 목적은 배열을 반환하지 않고 모든 객체 (객체 및 배열 모두)에 사용 가능한 방법을 사용하여 객체를 가져 와서 객체의 원래 내용을 수정하는 것입니다. JS 내의 거의 모든 것이 객체이므로, 상속 파이프 라인의 아래 부분에있는 요소는 기술적으로 사용할 수있는 요소를 기술적으로 사용할 수 있습니다.
이것이 작동하는 이유는 .map 함수가 단순히 기존 객체를 수정하는 대신 배열의 명시 적 또는 암시 적 RETURN을 제공해야하는 배열을 반환하기 때문입니다. Object.keys를 사용하여 객체가 배열이라고 생각하도록 기본적으로 프로그램을 속입니다.이 기능을 사용하면 개별 키와 관련된 값 (실제로 배열을 반환했지만 수정했습니다)에 따라 맵 기능을 사용할 수 있습니다. 정상적인 의미로 복귀하지 않는 한 원래 객체를 그대로 사용하여 생성되고 프로그래밍 된대로 수정 된 배열은 없습니다.
이 특정 프로그램은 images라는 객체를 가져와 해당 키의 값을 가져 와서 다른 함수 내에서 사용하기 위해 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')
};
개체의 원래 구조는 그대로 유지되며 반환되지 않는 한 정상적인 속성 액세스가 가능합니다. 일반처럼 배열을 반환하지 않으면 모든 것이 정상입니다. 목표는 원래 값 (이미지 [키])을 원하는 것이 아닌 다른 것으로 재지 정하는 것입니다. 내가 아는 한, 배열 출력을 방지하기 위해 이미지 [키]를 다시 할당하고 배열을 반환하기위한 암시 적 또는 명시 적 요청이 없었습니다 (변수 할당 이이 작업을 수행하고 나에게 반짝이고있었습니다).
편집하다:
원래 객체 수정을 피하기 위해 새로운 객체 생성과 관련된 다른 방법을 다룰 것입니다 (그리고 실수로 배열을 출력으로 생성하는 것을 피하기 위해 재 할당이 여전히 필요한 것으로 보입니다). 이 함수는 화살표 구문을 사용하며 나중에 사용하기 위해 단순히 새 객체를 만들려는 경우에 사용됩니다.
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) [키],
그런 다음 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
대신 사용 하는 것이 좋습니다 .