Javascript에서 배열 키를 얻는 방법은 무엇입니까?
이 코드로 만든 배열이 있습니다.
var widthRange = new Array();
widthRange[46] = { min:0, max:52 };
widthRange[66] = { min:52, max:70 };
widthRange[90] = { min:70, max:94 };
루프에서 각 값 46, 66, 90을 가져오고 싶습니다. 나는 시도 for (var key in widthRange)
했지만 이것은 나에게 많은 추가 속성을 제공합니다 (객체에 대한 기능이라고 가정합니다). 값이 순차적이지 않기 때문에 일반 for 루프를 사용할 수 없습니다.
다음과 hasOwnProperty
같이 속성이 객체 자체에 실제로 정의되어 있는지 확인 하려면 함수 를 호출해야합니다 .
for (var key in widthRange) {
if (key === 'length' || !widthRange.hasOwnProperty(key)) continue;
var value = widthRange[key];
}
에 대한 별도의 확인이 필요합니다 length
.
그러나 여기에서 배열을 사용해서는 안됩니다. 일반 객체를 사용해야합니다. 모든 Javascript 객체는 연관 배열로 작동합니다.
예를 들면 :
var widthRange = { }; //Or new Object()
widthRange[46] = { sel:46, min:0, max:52 };
widthRange[66] = { sel:66, min:52, max:70 };
widthRange[90] = { sel:90, min:70, max:94 };
문자열 화 된 키는를 사용하여 쿼리 할 수 있습니다 Object.keys(array)
.
배열 / 컬렉션 조작 또는 검사를하는 경우 Underscore.js를 사용하는 것이 좋습니다 . 작고 잘 테스트되었으며 몇 일 / 주 / 년의 자바 스크립트 두통을 줄일 수 있습니다. 키 기능은 다음과 같습니다.
키
개체 속성의 모든 이름을 검색합니다.
_.keys({one : 1, two : 2, three : 3});
=> ["one", "two", "three"]
for (var i = 0; i < widthRange.length; ++i) {
if (widthRange[i] != null) {
// do something
}
}
배열이 작동하는 방식이 아니기 때문에 설정 한 키만 얻을 수는 없습니다. 요소 46을 설정하면 0에서 45까지도 설정됩니다 (널 임에도 불구하고).
항상 두 개의 배열을 가질 수 있습니다.
var widthRange = [], widths = [], newVal = function(n) {
widths.push(n);
return n;
};
widthRange[newVal(26)] = { whatever: "hello there" };
for (var i = 0; i < widths.length; ++i) {
doSomething(widthRange[widths[i]]);
}
잘 편집 하십시오 내가 여기에 모두 젖었을 수도 있습니다 ...
당신의 배열이 arr = [ { a: 1, b: 2, c: 3 }, { a: 4, b: 5, c: 6 }, { a: 7, b: 8, c: 9 } ]
당신이 할 수있는 것처럼 보인다고 말하세요.
arr.map((o) => {
return Object.keys(o)
}).reduce((prev, curr) => {
return prev.concat(curr)
}).filter((col, i, array) => {
return array.indexOf(col) === i
});
["a", "b", "c"]
widthRange.map(function(_, i) { return i });
또는
widthRange.map((_, i) => i);
귀하의 원래 예제는 저에게 잘 작동합니다.
<html>
<head>
</head>
<body>
<script>
var widthRange = new Array();
widthRange[46] = { sel:46, min:0, max:52 };
widthRange[66] = { sel:66, min:52, max:70 };
widthRange[90] = { sel:90, min:70, max:94 };
var i = 1;
for (var key in widthRange)
{
document.write("Key #" + i + " = " + key + "; min/max = " + widthRange[key].min + "/" + widthRange[key].max + "<br />");
i++;
}
</script>
</html>
브라우저 결과 (Windows XP의 Firefox 3.6.2) :
Key #1 = 46; min/max = 0/52
Key #2 = 66; min/max = 52/70
Key #3 = 90; min/max = 70/94
나는 이것을 위해 {}
배열 ( []
)이 아닌 Object ( ) 를 사용해야한다고 생각합니다 .
데이터 세트는 각 키와 연관됩니다. 물건을 사용하면 비명을 지른다. 하다:
var obj = {};
obj[46] = { sel:46, min:0, max:52 };
obj[666] = { whatever:true };
// This is what for..in is for
for (var prop in obj) {
console.log(obj[prop]);
}
다음과 같은 유틸리티가 도움이 될 수 있습니다.
window.WidthRange = (function () {
var obj = {};
return {
getObj: function () {return obj;}
, add: function (key, data) {
obj[key] = data;
return this; // enabling chaining
}
}
})();
// Usage (using chaining calls):
WidthRange.add(66, {foo: true})
.add(67, {bar: false})
.add(69, {baz: 'maybe', bork:'absolutely'});
var obj = WidthRange.getObj();
for (var prop in obj) {
console.log(obj[prop]);
}
작동하는 것 같습니다.
var widthRange = new Array();
widthRange[46] = { sel:46, min:0, max:52 };
widthRange[66] = { sel:66, min:52, max:70 };
widthRange[90] = { sel:90, min:70, max:94 };
for (var key in widthRange)
{
document.write(widthRange[key].sel + "<br />");
document.write(widthRange[key].min + "<br />");
document.write(widthRange[key].max + "<br />");
}
나는 모든 객체 인스턴스에서 잘 작동하는 함수를 작성했습니다 (배열은 그 것입니다).
Object.prototype.toArray = function()
{
if(!this)
{
return null;
}
var c = [];
for (var key in this)
{
if ( ( this instanceof Array && this.constructor === Array && key === 'length' ) || !this.hasOwnProperty(key) )
{
continue;
}
c.push(this[key]);
}
return c;
};
용법:
var a = [ 1, 2, 3 ];
a[11] = 4;
a["js"] = 5;
console.log(a.toArray());
var b = { one: 1, two: 2, three: 3, f: function() { return 4; }, five: 5 };
b[7] = 7;
console.log(b.toArray());
산출:
> [ 1, 2, 3, 4, 5 ]
> [ 7, 1, 2, 3, function () { return 4; }, 5 ]
누구에게나 유용 할 수 있습니다.
... ????
또는 사용하려는 항목 목록이있는 경우 ...
var range = [46, 66, 90]
, widthRange=[]
, write=[];
widthRange[46] = { min:0, max:52 };
widthRange[66] = { min:52, max:70 };
widthRange[90] = { min:70, max:94 };
for(var x=0; x<range.length; x++){var key, wr;
key = range[x];
wr = widthRange[key] || false;
if(wr===false){continue;}
write.push(['key: #',key, ', min: ', wr.min, 'max:', wr.max].join(''));
}
참고 URL : https://stackoverflow.com/questions/2509432/how-to-get-array-keys-in-javascript
'Development Tip' 카테고리의 다른 글
프로그래밍 방식으로 버튼을 만들고 배경 이미지 설정 (0) | 2020.10.25 |
---|---|
PHP에서 예상치 못한 T_VARIABLE은 무엇입니까? (0) | 2020.10.25 |
모든 메타 데이터를 유지하면서 ffmpeg를 사용하여 .flac를 .mp3로 변환 (0) | 2020.10.25 |
Django의 텍스트 입력에서 html / javascript를 제거하는 방법 (0) | 2020.10.25 |
존재하지 않는 경우 지정된 디렉토리를 생성하기위한 XCOPY 스위치? (0) | 2020.10.25 |