아마 좋지 않을지 모르지만 인덱스에 문자열이 포함 된 배열이 있습니다. 이제 indexOf
을 사용해야하고 작동하지 않습니다. 아래의 코드는 -1을 반환합니다. 이 모든 것을 다시 작성하지 않고 b
을 얻는 방법은 없습니까?IndexOf 문자열을 인덱스로 사용하는 배열
답변
을한다. 사용중인 구문은 객체에 대한 속성을 정의하는 다른 방법입니다. 사람들이 이전에 제안한 모든 제안은 당신을 혼란스럽게합니다. 단순하게 유지하십시오. 배열에는 숫자 인덱스가 있습니다.
// 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)
보다 기존 코드에 구현하기 쉽거나 어렵에 따라 제안을
알았어요. 그래서, @funkwurm이 위에서 말했듯이 특정 값을 가진 객체의 속성을 찾으려고한다면 for/in 루프를 사용합니다. –
@AleshHoudek 예, 맞습니다. 그러나 for ... in 루프는 객체의'prototype' 체인 (상속을 생각해보십시오)을 통해 처리하고 의도하지 않은 속성을 반복 처리하므로 조심스럽게 처리해야합니다. 객체와 프로토 타입에 존재하는 속성이 많을수록 루프가 더 느리게 수행됩니다. 이것은 루핑 할 객체의'hasOwnProperty()'메소드를 적절히 사용하면 완화됩니다. – Brett
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
콘크리트 코드 : 당신은 속성`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
및 'b'를 배열에 추가합니다 (배열은 비어 있습니다). 'x.b'를 실행하면'b'를 얻을 수 있습니다. –
여기에 속성이있는 객체가있는 배열이 없습니다 ... – brso05
'x [ 'a'] = 0'하면 Array는 속성이 'a' 인 객체가됩니다. 그건 자바 스크립트의 느슨한 타이핑이야. 값이 1 인 속성이 있는지 알아보기 위해'for (prop in x) '를 사용하여 속성을 반복하는 메서드/함수를 작성해야합니다. 대신에'a, b, c, ...를 번역하는 함수를 만들 수 있습니다. '1, 2, 3, ... '과 뒤로. 그렇게하면 ACTUAL 배열을 유지할 수 있습니다. – funkwurm