Programming

JavaScript의 For..In 루프-키 값 쌍

procodes 2020. 2. 26. 22:46
반응형

JavaScript의 For..In 루프-키 값 쌍


foreachJavaScript에서 PHP 루프 와 같은 것을 수행 할 수있는 방법이 있는지 궁금합니다 . 내가 찾고있는 기능은 다음 PHP 스 니펫과 같습니다.

foreach($data as $key => $value) { }

JS for..in루프를 보고 있었지만를 지정할 수있는 방법이없는 것 같습니다 as. '정상'for 루프 ( for(var i = 0; i < data.length; i++) 로이 작업을 수행 하면 키 => 값 쌍을 가져 오는 방법이 있습니까?


ES6를 기본적으로 또는 Babel (js 컴파일러) 과 함께 사용할 수있는 경우 다음을 수행 할 수 있습니다.

const test = {a: 1, b: 2, c: 3};

for (const [key, value] of Object.entries(test)) {
  console.log(key, value);
}

이 출력을 인쇄합니다 :

a 1
b 2
c 3

Object.entries()메소드는 루프에서 [key, value]제공 한 것과 동일한 순서로 주어진 객체의 자체 열거 가능 속성 의 배열을 반환합니다 (차이 루프는 프로토 타입 체인의 속성도 열거한다는 점) .for...in

그것이 도움이되기를 바랍니다! =)


for (var k in target){
    if (target.hasOwnProperty(k)) {
         alert("Key is " + k + ", value is " + target[k]);
    }
}

hasOwnPropertytarget프로토 타입에서 상속하지 않고 해당 속성이 실제로 있는지 확인하는 데 사용됩니다 . 조금 더 간단합니다 :

for (var k in target){
    if (typeof target[k] !== 'function') {
         alert("Key is " + k + ", value is" + target[k]);
    }
}

그것은 단지 확인 k하는 방법 아닌 (것처럼 target입니다 array당신이 방법을 많이 얻을 것이다는, 예를 들어, 경고 indexOf, push, pop, 등.)


아무도 Object.keys언급하지 않았으므로 언급하겠습니다.

Object.keys(obj).forEach(function (key) {
   // do something with obj[key]
});

...에서 당신을 위해 일할 것입니다.

for( var key in obj ) {
  var value = obj[key];
}

최신 JavaScript에서는 다음을 수행 할 수도 있습니다.

for ( const [key,value] of Object.entries( obj ) ) {

}

var obj = {...};
for (var key in obj) {
    var value = obj[key];

}

PHP 문법은 설탕 일뿐입니다.


나는 그것이 i열쇠 라는 것을 알고 가치를 통해 얻을 수 있다고 가정합니다 data[i](그리고 바로 가기를 원합니다).

ECMAScript5는 배열에 forEach [MDN]도입 했습니다 (배열이있는 것 같습니다).

data.forEach(function(value, index) {

});

MDN 설명서는이를 지원하지 않는 브라우저를위한 shim을 제공합니다.

물론 이것은 객체에는 작동하지 않지만 비슷한 기능을 만들 수 있습니다.

function forEach(object, callback) {
    for(var prop in object) {
        if(object.hasOwnProperty(prop)) {
            callback(prop, object[prop]);
        }
    }
}

질문에 태그를 지정 jQuery는 배열과 객체 구조를 모두 반복 하는 $.each [docs]제공합니다 .


for (var key in myMap) {
    if (myMap.hasOwnProperty(key)) {
        console.log("key =" + key);
        console.log("value =" + myMap[key]);
    }
}

자바 스크립트에서 모든 객체에는 메타 정보가있는 여러 내장 키-값 쌍이 있습니다. 객체의 모든 키-값 쌍을 반복하면 반복됩니다. hasOwnProperty ()를 사용하면이를 걸러냅니다.


당신은 for..in그것을 위해 사용할 수 있습니다 .

for (var key in data)
{
    var value = data[key];
}

ES6은 이와 같이 사용할 수있는 Map.prototype.forEach (콜백)을 제공합니다

myMap.forEach(function(value, key, myMap) {
                        // Do something
                    });

이를 위해 'for in'루프를 사용할 수 있습니다.

for (var key in bar) {
     var value = bar[key];
}

아래는 점점 가까워지는 예입니다.

for(var key in data){
  var value = data[key];    
  //your processing here
}

jQuery를 사용하는 경우 http://api.jquery.com/jQuery.each/를 참조하십시오.


let test = {a: 1, b: 2, c: 3};
Object.entries(test).forEach(([key, value]) => console.log(key, value))

// a 1
// b 2
// c 3

당신이 사용하는 경우 Lodash을 , 당신은 사용할 수 있습니다_.forEach

_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
  console.log(key + ": " + value);
});
// => Logs 'a: 1' then 'b: 2' (iteration order is not guaranteed).

예, 자바 스크립트에서도 연관 배열을 가질 수 있습니다.

var obj = 
{
    name:'some name',
    otherProperty:'prop value',
    date: new Date()
};
for(i in obj)
{
    var propVal = obj[i]; // i is the key, and obj[i] is the value ...
}

var global = (function() {
   return this;
})();

// Pair object, similar to Python

function Pair(key, value) {
    this.key = key;
    this.value = value;

    this.toString = function() {
       return "(" + key + ", " + value + ")";
    };
}

/**
 * as function
 * @param {String} dataName A String holding the name of your pairs list.
 * @return {Array:Pair} The data list filled
 *    with all pair objects.
 */
Object.prototype.as = function(dataName) {
    var value, key, data;
    global[dataName] = data = [];

    for (key in this) {
       if (this.hasOwnProperty(key)) {
          value = this[key];

          (function() {
             var k = key,
                 v = value;

            data.push(new Pair(k, v));
          })();
       }
    }

    return data;
};

var d = {
   'one': 1,
   'two': 2
};

// Loop on your (key, list) pairs in this way
for (var i = 0, max = d.as("data").length; i < max; i += 1) {
   key = data[i].key;
   value = data[i].value;

   console.log("key: " + key + ", value: " + value);
}

// delete data when u've finished with it.
delete data;

참고 URL : https://stackoverflow.com/questions/7241878/for-in-loops-in-javascript-key-value-pairs



반응형