IT

객체마다?

lottoking 2020. 7. 15. 07:14
반응형

객체마다? [복제]


가능한 클래스 :
리터럴 값을 반복

JavaScript로 객체가 있습니다.

var object = someobject;

Object { aaa=true, bbb=true, ccc=true }

어떻게?

 object.each(function(index, value)) {
      console.log(value);
 }

작동하지 않는.


자바 수업에서는 표준 .each 함수가 없습니다. 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/keyshttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects / 배열 /지도

일반적인 for 루프 사용의 의미를 실제로 이해하고 속성 체인을 사용하는 루핑과 같은 특정 특성에 대한 사용을 참조하지 않는 일반적으로 바닐라 Javascript 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.eachObject.keys기능은 자동으로 알아서.

2. 일반 for-loop의 또 다른 다른 문제는 범위 및 비 폐쇄 문제입니다. 복잡하지만 예를 들어 다음 코드를 사용하십시오. 우리는 id가 button0, button1, button2 같은 많은 버튼을 가지고 있고 onclick을 설정하고 다음과 같이하고 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);
       });
   }
}

잠시 후 버튼 중 하나를 클릭하면 항상 "마지막 클릭!" 콘솔에서 "먼저 클릭!" 또는 "중간 클릭!". 왜? onclick 함수가 실행될 때 그 순간 변수 messagesByButtonId[buttonId] 사용하여 표시되기 때문입니다 . 그리고 루프가 그 순간에 끝났기 때문에 변수는 여전히 "button2"(마지막 루프 반복 동안 가졌던 값)이고 , 즉 "마지막 클릭!" 이 될 것 입니다.buttonIdbuttonIdmessagesByButtonId[buttonId]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

반응형