sourcecode

인덱스로 JSON 개체의 속성을 검색하시겠습니까?

copyscript 2023. 4. 4. 21:57
반응형

인덱스로 JSON 개체의 속성을 검색하시겠습니까?

이 JSON 오브젝트를 전제로 합니다.

var obj = {
    "set1": [1, 2, 3],
    "set2": [4, 5, 6, 7, 8],
    "set3": [9, 10, 11, 12]
};

"set2" 속성은 다음과 같이 검색할 수 있습니다.

obj["set2"]

인덱스로 "set2" 속성을 검색할 수 있는 방법이 있습니까?이것은 JSON 개체의 두 번째 속성입니다.이것은 동작하지 않습니다(물론).

obj[1]  

예를 들어 JSON 객체의 두 번째 속성을 가져오고 싶은데 이름을 알 수 없습니다.그러면 어떻게 하면 좋을까요?

업데이트: 예, 개체가 순서가 매겨지지 않은 속성 모음임을 이해했습니다.그러나 브라우저가 JSON 리터럴 / 문자열로 정의된 "원래" 순서를 엉망으로 만들지 않는다고 생각합니다.

JavaScript의 개체는 순서가 매겨지지 않은 속성 모음입니다.오브젝트는 해시 테이블입니다.

속성을 알파벳 순으로 정렬하려면 다른 배열에 속성에 대한 인덱스를 작성하는 방법이 있습니다.몇 시간 전에 Stack Overflow에 관한 질문에 답했습니다.이 질문에 대해서는, 확인해 주세요.

다음은1 개체에 대한 빠른 적응입니다.

var obj = {
    "set1": [1, 2, 3],
    "set2": [4, 5, 6, 7, 8],
    "set3": [9, 10, 11, 12]
};

var index = [];

// build the index
for (var x in obj) {
   index.push(x);
}

// sort the index
index.sort(function (a, b) {    
   return a == b ? 0 : (a > b ? 1 : -1); 
}); 

그러면 다음 작업을 수행할 수 있습니다.

console.log(obj[index[1]]);

앞서 인용한 답변은 이러한 오브젝트에 대해 반복할 수 있는 재사용 가능한 솔루션을 제안합니다.즉, JSON을 @Jacob Relkin이 제안한 것처럼 변경할 수 없는 경우입니다.이것이 더 쉬울 수 있습니다.


1 메서드를 사용하여 속성이 개체에 속하고 상속되지 않도록 할 수 있습니다.Object.prototype.

오래된 질문인 것은 알지만 인덱스로 필드를 가져올 방법을 찾았습니다.를 사용하여 실행할 수 있습니다.Object.keys방법.

를 호출할 때Object.keysmethod는 할당된 순서대로 키를 반환합니다(아래 예 참조).아래 브라우저에서 다음 방법을 테스트했습니다.

  • Google Chrome 버전 43.0
  • 파이어폭스 버전 33.1
  • Internet Explorer 버전 11

오브젝트 클래스의 작은 내선번호도 적어두었습니다.이것에 의해, 오브젝트의 n번째 키를 호출할 수 있습니다.getByIndex.

// Function to get the nth key from the object
Object.prototype.getByIndex = function(index) {
  return this[Object.keys(this)[index]];
};

var obj1 = {
  "set1": [1, 2, 3],
  "set2": [4, 5, 6, 7, 8],
  "set3": [9, 10, 11, 12]
};

var obj2 = {
  "set2": [4, 5, 6, 7, 8],
  "set1": [1, 2, 3],
  "set3": [9, 10, 11, 12]
};

log('-- Obj1 --');
log(obj1);
log(Object.keys(obj1));
log(obj1.getByIndex(0));


log('-- Obj2 --');
log(obj2);
log(Object.keys(obj2));
log(obj2.getByIndex(0));


// Log function to make the snippet possible
function log(x) {
  var d = document.createElement("div");
  if (typeof x === "object") {
    x = JSON.stringify(x, null, 4);
  }
  d.textContent= x;
  document.body.appendChild(d);
}

아니요. JavaScript 개체에서는 인덱스로 요소에 액세스할 수 없습니다.

이 JSON의 소스에 액세스 할 수 있는 경우는, 각 요소를 JSON 오브젝트로 변경해, 다음과 같이 오브젝트내에 키를 붙이는 것이 해결책입니다.

var obj = [
    {"key":"set1", "data":[1, 2, 3]},
    {"key":"set2", "data":[4, 5, 6, 7, 8]},
    {"key":"set3", "data":[9, 10, 11, 12]}
];

그러면 요소에 수치적으로 액세스할 수 있습니다.

for(var i = 0; i < obj.length; i++) {
    var k = obj[i]['key'];
    var data = obj[i]['data'];
    //do something with k or data...
}

간단한 솔루션, 단 한 줄..

var obj = {
    "set1": [1, 2, 3],
    "set2": [4, 5, 6, 7, 8],
    "set3": [9, 10, 11, 12]
};

obj = Object.values(obj);

obj[1]....

여기서 다음 "set2" 속성에 액세스할 수 있습니다.

    var obj = {
        "set1": [1, 2, 3],
        "set2": [4, 5, 6, 7, 8],
        "set3": [9, 10, 11, 12]
    };

    var output = Object.keys(obj)[1];

Object.keys는 제공된 개체의 모든 키를 Array로 반환합니다.

Jeroen Vervaeke의 답변은 모듈러형이며 정상적으로 동작하지만 jQuery 또는 Javascript의 "해시 테이블 객체" 기능에 의존하는 다른 라이브러리와 함께 사용할 경우 문제가 발생할 수 있습니다.

이 립으로 사용할 수 있도록 조금 수정했습니다.

function getByIndex(obj, index) {
  return obj[Object.keys(obj)[index]];
}

오브젝트를 반복하여 다음과 같이 인덱스에 속성을 할당할 수 있습니다.

var lookup = [];
var i = 0;

for (var name in obj) {
    if (obj.hasOwnProperty(name)) {
        lookup[i] = obj[name];
        i++;
    }
}

lookup[2] ...

그러나 다른 사람들이 말했듯이 키는 원칙적으로 순서가 맞지 않습니다.코더에 따라 달라지는 코드가 있다면 해킹이라고 생각하시면 됩니다.유닛 테스트를 실시해, 유닛이 언제 고장났는지 확인해 주세요.

"""
This could be done in python as follows.
Form the command as a string and then execute
"""
context = {
    "whoami": "abc",
    "status": "0",
    "curStep": 2,
    "parentStepStatus": {
        "step1":[{"stepStatus": 0, "stepLog": "f1.log"}],
        "step2":[{"stepStatus": 0, "stepLog": "f2.log"}]
    }
}
def punc():
          i = 1
          while (i < 10):
              x = "print(" + "context" + "['parentStepStatus']" + "['%s']"%("step%s")%(i) + ")"
              exec(x)
              i+=1
punc()

'두 번째 재산 '두 번째 재산'이라고요.var obj = { ... }중괄호 내부의 속성은 순서가 매겨져 있지 않습니다.이러한 '포' 루프를 통해 이동하는 경우에도 다른 JavaScript 구현에서 다른 순서로 반환될 수 있습니다.

그건 꽤 간단해...

var obj = {
    "set1": [1, 2, 3],
    "set2": [4, 5, 6, 7, 8],
    "set3": [9, 10, 11, 12]
};

jQuery.each(obj, function(i, val) {
	console.log(i); // "set1"
	console.log(val); // [1, 2, 3]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

var obj = {
    "set1": [
        1,
        2,
        3
    ],
    "set2": [
        4,
        5,
        6,
        7,
        8
    ],
    "set3": [
        9,
        10,
        11,
        12
    ]
};

var outputKeys = Object.keys(obj)[1];

var outputValues = Object.values(obj)[1];
//outputKeys would be "set2"`enter code here`
//outPutValues would be [4,5,6,7,8]

솔루션:

Object.prototype.__index=function(index)
                         {var i=-1;
                          for (var key in this)
                              {if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
                                  {++i;
                                  }
                               if (i>=index)
                                  {return this[key];
                                  }
                              }
                          return null;
                         }
aObj={'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'ding'};
alert(aObj.__index(4));

언급URL : https://stackoverflow.com/questions/4044845/retrieving-a-property-of-a-json-object-by-index

반응형