2011-01-07 6 views

답변

6

그 속성으로 구성되는 객체가, 당신은 이런 식으로 뭔가해야 할 것입니다 (연관 배열 개념적으로 유사한, 또는 해시 테이블) 키/값 쌍의 형태를 취할 이후 :

Object.size = function(obj) { 
    var size = 0, key; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) size++; 
    } 
    return size; 
}; 

var array = []; 
array["foo"] = "bar"; 
array["bar"] = "foo"; 

var size = Object.size(array); 

데모 : http://jsfiddle.net/gBG34/

+1

또는 Object.prototype.size = function() ... 다음과 같이 사용할 수 있습니다. var size = array.size() –

+0

... 일반 함수이거나' getSize (var);' – karim79

+3

JS에는 연관 배열과 같은 것이 없습니다. 그것은 객체이고 속성에 액세스하는 대체 구문입니다. 'array [ "foo"]'대신'array.foo'라고 쓸 수 있습니다. 이것이 length 속성이 작동하지 않는 이유입니다. 그는 배열 객체에 속성을 설정하고 배열에 항목을 추가하지 않습니다. – DanMan

1

은 기본적으로 당신은

array["foo"] = "bar"

은 그냥 객체 인 배열에 좀 더 속성을 추가 할 때. 자바 스크립트에서 array.foo와 array [ 'foo']는 같은 의미입니다. 어쩌면 내가 순진하고있어

+0

감사를 간다. 하지만 질문에 대답하지 않습니까? – Mantar

+1

개체로 변환하지 않습니다. 배열 *은 * 객체이므로 임의의 속성을 설정할 수 있습니다. – lonesomeday

0

는 (내 자바 스크립트는 될 일을하지 않습니다)하지만이 같은 안 :

var array = []; 
array[0] = "bar"; 
array[1] = "foo"; 
document.write(array.length); 
0

실제 크기는 0 당신이 어떤을 두지 않았기 때문이다 항목을 배열 객체로 변환 - 이는 메서드 (푸시 등) 또는 인덱스 속성 (또는 생성자)에 값을 할당하는 방법으로 만 수행 할 수 있습니다.

4

당신은하지 그것을 새로운 요소를 제공, 배열에 속성을 설정합니다. 배열은 다른 Javascript 객체와 마찬가지로 임의의 속성을받을 수 있습니다. 예를 들어 :

var foo = {}; 
foo['bar'] = 'foobar'; 
console.log(foo); // outputs {bar: 'foobar'} 
7

첫째 : 당신은 키 => 값 쌍을 원하는 경우

var foo = []; 
foo.push('foobar'); 
console.log(foo); // outputs ['foobar'] 

, 대신 개체를 사용 : 배열에 항목을 추가하려면

var foo = []; 
foo.bar = 'foobar'; 
console.log(foo.bar); // outputs 'foobar' 
console.log(foo); // outputs [] -- empty array 

, Array.push 사용 array에있는 항목 수가 0이기 때문에 길이가 0입니다.

이 구문 array["foo"] = "bar"foo이라는 값을 가진 bar 속성을 만듭니다. 모든이다 http://jsfiddle.net/VyjJD/3/

var array = []; 

array["foo"] = "bar"; 
array["bar"] = "foo"; 
array.bin = function() { return "bin"; }; 

array[0] = "bar"; 
array[1] = "foo"; 
array[2] = "bin"; 
array[3] = "bat"; 

var props = 0; 

for (key in array) 
    props++; 

document.write(array.length + "<br />" 
      + props + "<br />" 
      + (array.foo == array["foo"]) + "<br />" 
      + array.bar + "<br />" 
      + array.bin()); 

공지 사항 array.length = 4 있다고하지만 props = 7 : 길이는 배열에 아무것도 추가하지 않은 때문에, 당신은 단지

작업 버전 여기 배열에 새 속성을 설정 한 여전히 0 배열의 항목 및 속성 수를 반환합니다.

+0

+100 좋은 설명. 고맙습니다. – Radek

관련 문제