각각 목적어로?
JavaScript에 개체가 있습니다.
var object = someobject;
Object { aaa=true, bbb=true, ccc=true }
이걸 어떻게 사용해야 하나요?
object.each(function(index, value)) {
console.log(value);
}
작동하지 않습니다.
Javascript Object에는 표준 .각 함수가 없습니다.jQuery는 함수를 제공합니다.http://api.jquery.com/jQuery.each/ 을 참조하십시오. 아래는 작동해야 합니다.
$.each(object, function(index, value) {
console.log(value);
});
또 다른 옵션은 바닐라 자바스크립트를 사용하는 것입니다.Object.keys()
및 배열.map()
이와 같은 기능
Object.keys(object).map(function(objectKey, index) {
var value = object[objectKey];
console.log(value);
});
https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Object/keys 및 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map 을 참조하십시오.
일반적인 for-loop을 사용하는 것의 의미를 제대로 이해하고 속성 체인을 루프하는 것과 같은 특정 특성에 대해 사용하는 것을 보지 않는 한, 일반적으로 이것들은 바닐라 자바스크립트를 루프용으로 사용하는 것보다 더 낫습니다.
하지만 일반적으로, for-loop은 다음보다 더 잘 작동하지 않습니다.jQuery
또는Object.keys().map()
아래의 일반 for-loop을 사용하여 두 가지 잠재적인 문제를 살펴보겠습니다.
맞아요, 그래서 다른 답변에서도 지적했듯이, 간단한 자바스크립트 대안은 다음과 같습니다.
for(var index in object) {
var attr = object[index];
}
이 문제에는 두 가지 잠재적인 문제가 있습니다.
1. 찾고 있는 속성이 프로토타입 체인의 위쪽이 아닌 개체 자체의 속성인지 확인하려고 합니다.이는 다음을 통해 확인할 수 있습니다.hasOwnProperty
그렇게 기능합니다.
for(var index in object) {
if (object.hasOwnProperty(index)) {
var attr = object[index];
}
}
자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty 을 참조하십시오.
그jQuery.each
그리고.Object.keys
기능은 이 문제를 자동으로 처리합니다.
2. 일반 for-loop과 관련된 또 다른 잠재적인 문제는 범위 및 비폐쇄 문제입니다.이것은 약간 복잡하지만, 다음 코드를 예로 들어 보겠습니다.우리는 button0, button1, button2 등의 ID를 가진 많은 버튼들을 가지고 있고, 우리는 그것들에 온클릭을 설정하고 그것들을 하기를 원합니다.console.log
다음과 같이:
<button id='button0'>click</button>
<button id='button1'>click</button>
<button id='button2'>click</button>
var messagesByButtonId = {"button0" : "clicked first!", "button1" : "clicked middle!", "button2" : "clicked last!"];
for(var buttonId in messagesByButtonId ) {
if (messagesByButtonId.hasOwnProperty(buttonId)) {
$('#'+buttonId).click(function() {
var message = messagesByButtonId[buttonId];
console.log(message);
});
}
}
시간이 지난 후 콘솔에서 항상 "마지막으로 클릭!" 버튼을 클릭하고 "먼저 클릭!" 또는 "가운데를 클릭!"하지 않는 경우.왜냐고요? 온클릭 기능이 실행될 때 표시되기 때문입니다.messagesByButtonId[buttonId]
사용buttonId
변수입니다.그리고 그 순간 루프가 끝났기 때문에,buttonId
"반복 가졌던 값일이고, "button2"("button2"")일 것입니다.messagesByButtonId[buttonId]
▁▁be 될 것입니다.messagesByButtonId["button2"]
" "마지막으로!"
폐쇄에 대한 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures 을 참조하십시오.특히 그 페이지의 마지막 부분에서 우리의 예를 다룹니다.
다시.jQuery.each
그리고.Object.keys().map()
우리를 위해 이 문제를 자동으로 해결합니다, 왜냐하면 그것은 우리에게 제공하기 때문입니다.function(index, value)
(폐쇄가 있음) 그래서 우리는 지수와 가치를 모두 사용하는 것이 안전하고 그것들이 우리가 기대하는 가치를 가지고 있다는 것을 확신합니다.
for(var key in object) {
console.log(object[key]);
}
var object = { "a": 1, "b": 2};
$.each(object, function(key, value){
console.log(key + ": " + object[key]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
//output
a: 1
b: 2
언급URL : https://stackoverflow.com/questions/11846484/each-for-object
'source' 카테고리의 다른 글
PowerShell - "Write-Output" vs "return" 함수 (0) | 2023.09.07 |
---|---|
url()의 값을 인용할 필요가 있습니까? (0) | 2023.09.02 |
부트스트랩 4 파일 입력에 파일 이름이 표시되지 않음 (0) | 2023.09.02 |
MariaDB 10.0 시리즈는 PHP 5.6.10과 호환됩니까? (0) | 2023.09.02 |
MariaDB TX(엔터프라이즈) 대 무료 차이점? (0) | 2023.09.02 |