2014-12-16 2 views
-3

아마 좋지 않을지 모르지만 인덱스에 문자열이 포함 된 배열이 있습니다. 이제 indexOf을 사용해야하고 작동하지 않습니다. 아래의 코드는 -1을 반환합니다. 이 모든 것을 다시 작성하지 않고 b을 얻는 방법은 없습니까?IndexOf 문자열을 인덱스로 사용하는 배열

+1

및 'b'를 배열에 추가합니다 (배열은 비어 있습니다). 'x.b'를 실행하면'b'를 얻을 수 있습니다. –

+0

여기에 속성이있는 객체가있는 배열이 없습니다 ... – brso05

+2

'x [ 'a'] = 0'하면 Array는 속성이 'a' 인 객체가됩니다. 그건 자바 스크립트의 느슨한 타이핑이야. 값이 1 인 속성이 있는지 알아보기 위해'for (prop in x) '를 사용하여 속성을 반복하는 메서드/함수를 작성해야합니다. 대신에'a, b, c, ...를 번역하는 함수를 만들 수 있습니다. '1, 2, 3, ... '과 뒤로. 그렇게하면 ACTUAL 배열을 유지할 수 있습니다. – funkwurm

답변

1

을한다. 사용중인 구문은 객체에 대한 속성을 정의하는 다른 방법입니다. 사람들이 이전에 제안한 모든 제안은 당신을 혼란스럽게합니다. 단순하게 유지하십시오. 배열에는 숫자 인덱스가 있습니다.

// this is adding values to an array 
var x = []; 
x[0] = 'one'; 
x[1] = 'two'; 
console.log(x[0]);  // outputs 'one' 

// this is adding a property to an object 
var y = {}; 
y['width'] = 20; 
y['height'] = 40; 
console.log(y['width']); // outputs 20 
console.log(y.height); // outputs 40 

// this is adding a property to our previous array 
// (because Arrays are objects too in JavaScript) 
x['name'] = 'My Array'; 
console.log(x.name);  // outputs 'My Array' 

x.indexOf('My Array'); // returns -1 because 'My Array' is not stored in the array 
x.indexOf('two');  // returns 1 because that's the index of 'two' in the array 
내가 코멘트에서 만든 시나리오이 for (prop in x)보다 기존 코드에 구현하기 쉽거나 어렵에 따라 제안을
+0

알았어요. 그래서, @funkwurm이 위에서 말했듯이 특정 값을 가진 객체의 속성을 찾으려고한다면 for/in 루프를 사용합니다. –

+1

@AleshHoudek 예, 맞습니다. 그러나 for ... in 루프는 객체의'prototype' 체인 (상속을 생각해보십시오)을 통해 처리하고 의도하지 않은 속성을 반복 처리하므로 조심스럽게 처리해야합니다. 객체와 프로토 타입에 존재하는 속성이 많을수록 루프가 더 느리게 수행됩니다. 이것은 루핑 할 객체의'hasOwnProperty()'메소드를 적절히 사용하면 완화됩니다. – Brett

1
x = []; 
x['a'] = 0; 
x['b'] = 1; 

var valueIndex = Object.keys(x).map(function(prop){ 
    return x[prop] 
}).indexOf(1); 

Object.keys(x)[valueIndex] //b 

정말 순서대로 될 것하지 않는

x = []; 
x['a'] = 0; 
x['b'] = 1; 
print(x.indexOf(1)); 
그냥 당신이 이해하지 않는 근본적인 문제는 배열 인덱스와 같은 문자열을하지 수 있다는 것입니다

Object.keys(x)[1]; //b 
0

콘크리트 코드 : 당신은 속성`A`을 추가하는

function put(arr, letter, value) { 
    arr[letter.toLowerCase().charCodeAt(0)-96] = value; 
} 
function find(arr, value) { 
    return String.fromCharCode(x.indexOf(value)+96); 
} 

x = []; 
put(x, 'a', 0); 
put(x, 'b', 1); 
print(find(x, 1)); // gives b