연관 배열 개체의 JavaScript foreach 루프
각 루프의 경우 JavaScript 관련 어레이 개체에서 반복되지 않는 이유는 무엇입니까?
// Defining an array
var array = [];
// Assigning values to corresponding keys
array["Main"] = "Main page";
array["Guide"] = "Guide page";
array["Articles"] = "Articles page";
array["Forum"] = "Forum board";
// Expected: loop over every item,
// yet it logs only "last" assigned value - "Forum"
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
j리 jeach()
도움이 될 수 있습니다.https://api.jquery.com/jQuery.each/
.length
속성은 숫자 색인(키)을 사용하여 속성만 추적합니다.열쇠는 현을 사용하고 있습니다.
다음과 같이 할 수 있습니다.
var arr_jq_TabContents = {}; // no need for an array
arr_jq_TabContents["Main"] = jq_TabContents_Main;
arr_jq_TabContents["Guide"] = jq_TabContents_Guide;
arr_jq_TabContents["Articles"] = jq_TabContents_Articles;
arr_jq_TabContents["Forum"] = jq_TabContents_Forum;
for (var key in arr_jq_TabContents) {
console.log(arr_jq_TabContents[key]);
}
안전을 위해 이러한 루프에서는 상속의 예기치 않은 결과가 되지 않도록 하는 것이 좋습니다.
for (var key in arr_jq_TabContents) {
if (arr_jq_TabContents.hasOwnProperty(key))
console.log(arr_jq_TabContents[key]);
}
edit - 이 시점에서는, 이 점에 주의해 주세요.Object.keys()
최신 브라우저 및 노드 등에서 사용할 수 있습니다.합니다.
Object.keys(arr_jq_TabContents).forEach(function(key, index) {
console.log(this[key]);
}, arr_jq_TabContents);
가 '콜백'으로 되었습니다..forEach()
는, 각하고, 그 인덱스를 합니다.Object.keys()
함수가 반복하고 있는 어레이도 통과했습니다만, 그 어레이는 그다지 도움이 되지 않습니다.원래의 오브젝트가 필요합니다.그것은 이름으로 직접 접속할 수 있지만, (내 생각에는) 명시적으로 전달하는 것이 조금 낫다.이것은 두 번째 인수를 넘겨서 하는 것이다..forEach()
- - 로 됩니다.this
콜백 내부로 이동합니다.(아래 코멘트에 기재되어 있는 것을 확인했습니다).
이것은 매우 간단한 접근법입니다.다음과 같은 키도 얻을 수 있다는 장점이 있습니다.
for (var key in array) {
var value = array[key];
console.log(key, value);
}
ES6의 경우:
array.forEach(value => {
console.log(value)
})
ES6의 경우(값, 인덱스 및 어레이 자체를 원하는 경우):
array.forEach((value, index, self) => {
console.log(value, index, self)
})
Node.js 또는 브라우저가 지원하는 경우 를 사용하는 대신 사용할 수 있습니다.Object.keys()
(포인티의 대답).
const h = {
a: 1,
b: 2
};
Object.entries(h).forEach(([key, value]) => console.log(value));
// logs 1, 2
예에서는 " " 입니다.forEach
는 어레이 할당 파괴를 사용합니다.
이미 몇 가지 간단한 예가 있지만, 당신이 질문을 어떻게 표현했는지를 보면 당신은 아마도 PHP 배경에서 나왔을 것이고, 자바스크립트가 같은 방식으로 작동하기를 기대하고 있다는 것을 알 수 있습니다.-그렇지 않습니다. PHParray
는 JavaScript와 매우 .Array
.
PHP에서는, 수치 을 실행할 수 (PHP 서서 can can can can can can can can can can can can can can in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in 。array_*
을 사용할 수 .count()
( ) 참참참참주 。배열을 만들고 숫자 대신 문자열 인덱스에 할당하기 시작하면 됩니다.
JavaScript에서는 모든 것이 객체이며(원본: 문자열, 숫자, 부울 제외), 배열은 숫자 인덱스를 사용할 수 있는 특정 구현입니다. 모든 은 배열에 .length
어레이 메서드를 사용하여 반복할 수 있습니다( )map
,forEach
,reduce
,filter
,find
, 등) 단, 모든 것이 오브젝트이기 때문에 어떤 오브젝트에도 속성을 할당하는 것은 항상 자유입니다.각 괄호 표기법은 속성에 액세스하는 다른 방법일 뿐입니다.따라서 다음과 같습니다.
array['Main'] = 'Main Page';
실제로는 다음과 같습니다.
array.Main = 'Main Page';
당신의 설명으로 보아 당신은 'associative array'를 원하는 것 같습니다만, JavaScript의 경우, 이것은 객체를 해시맵으로 사용하는 단순한 경우입니다.또한 예시로 알고 있지만 변수 유형만 설명하는 의미 없는 이름은 피하십시오(예:array
및 그 내용에 근거한 이름(예:pages
단순한 오브젝트에는 반복하는 방법이 별로 없기 때문에 먼저 어레이로 변환하는 경우가 많습니다.Object
메서드(Object.keys
이 경우 -- 또한entries
그리고.values
현재 일부 브라우저에 추가 중)을 루프할 수 있습니다.
// Assigning values to corresponding keys
const pages = {
Main: 'Main page',
Guide: 'Guide page',
Articles: 'Articles page',
Forum: 'Forum board',
};
Object.keys(pages).forEach((page) => console.log(page));
arr_jq_TabContents[key]
는 어레이를 0 인덱스 형식으로 표시합니다.
다음은 연관 배열을 일반 개체 유형으로 사용하는 간단한 방법입니다.
Object.prototype.forEach = function(cb){
if(this instanceof Array) return this.forEach(cb);
let self = this;
Object.getOwnPropertyNames(this).forEach(
(k)=>{ cb.call(self, self[k], k); }
);
};
Object({a:1,b:2,c:3}).forEach((value, key)=>{
console.log(`key/value pair: ${key}/${value}`);
});
이는 대부분의 경우(본질적으로) 올바르지 않습니다.
var array = [];
array["Main"] = "Main page";
이름을 사용하여 어레이에 요소가 아닌 속성이 생성됩니다.Main
어레이는 오브젝트이지만 일반적으로 어레이에 요소 이외의 속성을 작성하는 것은 원하지 않습니다.
에 인덱스를 붙이고 싶은 경우array
그 이름들은 보통 '무엇을 쓰느냐'는Map
또는 배열이 아닌 일반 객체입니다.
를 사용하여Map
(ES2015+), 전화하겠습니다.map
난 창의적이니까
let map = new Map();
map.set("Main", "Main page");
그런 다음 반복기를 사용하여 반복한다.values
,keys
, 또는entries
예를 들어 다음과 같습니다.
for (const value of map.values()) {
// Here, `value` will be `"Main page"`, etc.
}
평범한 물체를 사용하는 것, 저는 창조적으로 그것을obj
:
let obj = Object.create(null); // Creates an object with no prototype
obj.Main = "Main page"; // Or: `obj["Main"] = "Main page";`
그런 다음 그 내용을 반복하여Object.keys
,Object.values
, 또는Object.entries
예를 들어 다음과 같습니다.
for (const value of Object.values(proches_X)) {
// Here, `value` will be `"Main page"`, etc.
}
다음과 같이 할 수 있습니다.
var array = [];
// Assigning values to corresponding keys
array[0] = "Main page";
array[1] = "Guide page";
array[2] = "Articles page";
array[3] = "Forum board";
array.forEach(value => {
console.log(value)
})
var obj = {
no: ["no", 32],
nt: ["no", 32],
nf: ["no", 32, 90]
};
count = -1; // Which must be a static value
for (i in obj) {
count++;
if (obj.hasOwnProperty(i)) {
console.log(obj[i][count])
};
};
이 코드에서는 어레이가 포함되어 있기 때문에 어레이 내의 콜 값에 대해 괄호 방식을 사용했습니다.단, 간단히 말해서 변수가i
에는 속성 키가 있으며 관련 배열의 두 값 모두라고 불리는 루프가 있습니다.
그것은 완벽한 방법이다.
거의 모든 대답이 처음부터 물어본 것이 아닌 것 같다.
foreach-loop은 동작하지 않는 것 같습니다.또한 단순한 for-loop도 동작하지 않습니다.어소시에이티브 어레이(폴백의 하나)의 경우 길이 속성이 0이 되기 때문입니다.단, 연관지을 수 있는 어레이를 위해
// Defining an array
var array = [];
// Assigning values to corresponding keys
array["Main"] = "Main page";
array["Guide"] = "Guide page";
array["Articles"] = "Articles page";
array["Forum"] = "Forum board";
// Expected: loop over every item,
// yet it logs only "last" assigned value - "Forum"
for (var index in array) {
console.log(index,array[index]);
}
언급URL : https://stackoverflow.com/questions/18804592/javascript-foreach-loop-on-an-associative-array-object
'programing' 카테고리의 다른 글
Carbon을 사용하여 다른 시간대에서 UTC 가져오기 (0) | 2022.11.03 |
---|---|
Chrome 콘솔에서 VueX 작업/변환 오류 (0) | 2022.11.03 |
파이썬 목록을 다른 "하위 목록"으로 분할합니다(예: 더 작은 목록). (0) | 2022.11.03 |
동일한 열 값을 가진 특정 행을 mysql 테이블에서 삭제하려면 어떻게 해야 합니까? (0) | 2022.11.03 |
JavaScript에서 문자열의 대시 후 모든 항목 가져오기 (0) | 2022.11.03 |