2012-11-11 8 views
2

JavaScript 개체의 마지막 요소를 어떻게 찾을 수 있습니까? "마지막"으로 가장 큰 인덱스를 가진 요소를 찾았습니까? 나는. 나는 (JSON 등) 아약스를 통해 배열과 유사한 객체를 수신하고,뿐만 아니라 숫자가 아닌 키가 있습니다 : 그것은 일반 배열 인 경우에, 나는 array.length을 사용가장 큰 숫자 인덱스를 가진 요소

var received = { 
    0: 'something', 
    1: 'something else', 
    2: 'some stuff', 
    3: 'some more stuff', 
    'crap' : 'this screws the whole thing' 
} 

. 마찬가지로 요소를 찾기 위해 단순히 요소를 반복 할 수 있습니다.

더 좋은 방법이 있습니까? jQuery가 솔루션에 필요하다면 괜찮습니다.

+2

당신이 할 수있는 모든과 키를 통해보고입니다'에 대한 ... in' 또는'Object.keys()'. JavaScript는 키의 특정 순서를 약속하지 않습니다. – Pointy

답변

3

이 zzzzBov 다윗 뮐러의 코드처럼 작동하지만 라이브러리를 사용하여 기능을 훨씬 단축해야합니까 :

01은 객체에있는 모든 키를 반복해야 할 것이다

열거 형으로 확장 된 프로토 타입 객체가있는 객체 (JSON.parse 결과의 경우는 아닙니다)가 있다면 Object.getOwnPropertyNames을 대신 사용할 수 있습니다.

1

이것은 배열이 아니며 개체 리터럴입니다. 또한 객체 리터럴의 항목 순서는 생성 후 보존 될 수 있습니다 (대부분의 브라우저가이를 준수하고 있음에도 불구하고).

일반적으로 귀하의 질문에 대한 답변은 다음과 같습니다. 당신이 할 수있는 일은 모든 부동산에 대해 반복하고 마지막 부동산이나 관심이있는 부동산을 찾는 것입니다 (How to Loop through plain JavaScript object with objects as members? 참조). 그러나 속성이 선언 된 순서는 반복 중에 보존 될 필요가 없다는 것을 기억하십시오. 이것이 진정한 배열합니다 ('crap' 키를 무시를) 인 경우

그러나, 그것은 꽤 쉽게 : (하지 [] 사용하여 만든, {}) 배열로

received = [ 
'something', 
'something else', 
'some stuff', 
'some more stuff' 
]; 

var last = received[received.length - 1]; 
+0

+1 즉, 요소를 반복하고 최대 인덱스가있는 요소를 찾을 수 있습니까? 사실 jQuery DataTables의 데이터 행이며 해당 라이브러리는 데이터에 행의 id 속성을 설정하는 데 사용하는 "DT_rowId"키가 있어야합니다. 따라서 DataTables와 함께 작동하지만 이후에 추가 처리가 필요할 때 실패합니다. – Lou

+0

@LousyCoder : 예, 내 업데이트를 참조하십시오. –

1

length 속성이 이상의 더 많은입니다 마지막으로 할당 된 인덱스 그래서 :

var a = []; 
a[0] = 'something'; 
a[5] = 'else'; 
a["foo"] = 'bar'; 
console.log(a.length); 

는 두 배열의 요소와 foo 속성이 'bar'로 설정하더라도이있다하더라도, "6"을 인쇄합니다. length 속성은 숫자 인덱스의 영향을받습니다.

+0

+1 감사합니다. 불행히도 문자열 키를 포함하는 연관 php 배열은 객체로 jsonified가됩니다. – Lou

+0

@LousyCoder - 너무 나쁩니다. 나는 당신이 JSON으로부터 JS 객체를 생성하여 그것을 고칠 수 있다고 가정하고 모든 키들을 거치고, 만약 있다면 (있는 경우) isNaN을 사용하여 숫자를 테스트한다. 그래도 총체적으로. –

0

이 물론 아니 가장 우아한 접근 방식이지만,

문자
<script> 
var received = { 
    0: 'something', 
    1: 'something else', 
    2: 'some stuff', 
    3: 'some more stuff', 
    'crap' : 'this screws the whole thing' 
}; 

var max = null; 

for (var i in received) 
{ 
    if (received.hasOwnProperty(i) && !isNaN(i)) 
    { 
     if (max == null || i > max) 
      max = i; 
    } 
} 

if (max) 
    alert(received[max]); //some more stuff 
</script> 
0

당신이 가장 큰 숫자 인덱스 값이있는 항목을 알고 싶은 경우에 충실해야하는 경우 다른 선택의 여지가 없어,

(function() { 
    var i, 
     o, 
     temp; 
    o = getYourObject(); 
    temp = -Infinity; //lowest possible value 
    for (i in o) { 
     if (o.hasOwnProperty(i) && 
      !isNaN(i) && 
      +i > temp) { 
      temp = +i; 
     } 
    } 
    console.log(temp); //this is the key with the greatest numeric value 
}()); 
1
var received = { 
    0: 'something', 
    2: 'some stuff', 
    3: 'some more stuff', 
    1: 'something else', 
    'crap' : 'this screws the whole thing' 
}; 

var prop, 
    max = -1; 
for (prop in received) { 
    if (Object.prototype.hasOwnProperty.call(received, prop) && !isNaN(prop)) { 
    max = Math.max(max, prop); 
    } 
} 

console.log(max); 
관련 문제