답변:
ES6를 기본적으로 또는 Babel (js 컴파일러) 과 함께 사용할 수있는 경우 다음을 수행 할 수 있습니다.
const test = {a: 1, b: 2, c: 3};
for (const [key, value] of Object.entries(test)) {
console.log(key, value);
}
이 출력을 인쇄합니다 :
a 1
b 2
c 3
이 Object.entries()
메소드는 루프에서 [key, value]
제공 한 것과 동일한 순서로 주어진 객체 자체의 열거 가능한 속성 쌍 의 배열을 반환합니다 (차이 루프는 프로토 타입 체인의 속성도 열거한다는 점이 다릅니다) .for...in
그것이 도움이되기를 바랍니다! =)
Object.entries
호출로 인해 느리다고 가정합니다 . 그래도 테스트를 실행하지 않았습니다.
for (var k in target){
if (target.hasOwnProperty(k)) {
alert("Key is " + k + ", value is " + target[k]);
}
}
hasOwnProperty
target
프로토 타입에서 상속하지 않고 해당 속성이 실제로 있는지 확인하는 데 사용됩니다 . 조금 더 간단합니다 :
for (var k in target){
if (typeof target[k] !== 'function') {
alert("Key is " + k + ", value is" + target[k]);
}
}
그것은 단지 확인 k
하는 방법 아닌 (것처럼 target
입니다 array
당신이 방법을 많이 얻을 것이다는, 예를 들어, 경고 indexOf
, push
, pop
, 등.)
Object.keys
입니다. Object.keys(target).forEach(function (key) { target[key]; });
.
target
사용하여 생성되는 Object.create(null)
코드를 변경해야합니다, target.hasOwnProperty(k)
> -Object.prototype.hasOwnProperty.call(target,k)
k
, target
그리고 property
? 나를 위해, 자바 스크립트가 아닌이 정의되지 않은 영역 :)
아무도 Object.keys
언급하지 않았으므로 언급하겠습니다.
Object.keys(obj).forEach(function (key) {
// do something with obj[key]
});
for of
tc39wiki.calculist.org/es6/for-of
나는 그것이 i
열쇠 라는 것을 알고 가치를 통해 얻을 수 있다고 가정합니다 data[i]
(그리고 바로 가기를 원합니다).
ECMAScript5는 배열에 forEach
[MDN] 을 도입 했습니다 (배열이있는 것 같습니다).
data.forEach(function(value, index) {
});
MDN 설명서는이를 지원하지 않는 브라우저를위한 shim을 제공합니다.
물론 이것은 객체에는 작동하지 않지만 비슷한 기능을 만들 수 있습니다.
function forEach(object, callback) {
for(var prop in object) {
if(object.hasOwnProperty(prop)) {
callback(prop, object[prop]);
}
}
}
질문에 태그를 지정 했으므로 jqueryjQuery는 배열과 객체 구조를 모두 반복 하는 $.each
[docs] 를 제공합니다 .
for each
구문 을 허용하는 비표준 확장이 있습니다 . for each (let val in myObj) console.log(val);
.
당신은 for..in
그것을 위해 사용할 수 있습니다 .
for (var key in data)
{
var value = data[key];
}
ES6은 이와 같이 사용할 수있는 Map.prototype.forEach (콜백)을 제공합니다
myMap.forEach(function(value, key, myMap) {
// Do something
});
myMap
는 무엇입니까?
let test = {a: 1, b: 2, c: 3};
Object.entries(test).forEach(([key, value]) => console.log(key, value))
// a 1
// b 2
// c 3
[['a', 1],['b',2],['c',3]]
. 는 forEach
키 / 값 배열의 각을 해체하고 두 개의 변수를 설정 key
하고 value
여기에 출력 - 당신이 함수에서 원하는대로 사용할 수, console.log
.
아래는 점점 가까워지는 예입니다.
for(var key in data){
var value = data[key];
//your processing here
}
jQuery를 사용하는 경우 http://api.jquery.com/jQuery.each/를 참조하십시오.
이 질문이 작성된 후 지난 몇 년 동안 Javascript는 몇 가지 새로운 기능을 추가했습니다. 그중 하나가 Object.Entries 메소드입니다.
다음 코드 스 니펫은 MDN에서 직접 복사
const object1 = {
a: 'somestring',
b: 42
};
for (let [key, value] of Object.entries(object1)) {
console.log(`${key}: ${value}`);
}
예, 자바 스크립트에서도 연관 배열을 가질 수 있습니다.
var obj =
{
name:'some name',
otherProperty:'prop value',
date: new Date()
};
for(i in obj)
{
var propVal = obj[i]; // i is the key, and obj[i] is the value ...
}
var global = (function() {
return this;
})();
// Pair object, similar to Python
function Pair(key, value) {
this.key = key;
this.value = value;
this.toString = function() {
return "(" + key + ", " + value + ")";
};
}
/**
* as function
* @param {String} dataName A String holding the name of your pairs list.
* @return {Array:Pair} The data list filled
* with all pair objects.
*/
Object.prototype.as = function(dataName) {
var value, key, data;
global[dataName] = data = [];
for (key in this) {
if (this.hasOwnProperty(key)) {
value = this[key];
(function() {
var k = key,
v = value;
data.push(new Pair(k, v));
})();
}
}
return data;
};
var d = {
'one': 1,
'two': 2
};
// Loop on your (key, list) pairs in this way
for (var i = 0, max = d.as("data").length; i < max; i += 1) {
key = data[i].key;
value = data[i].value;
console.log("key: " + key + ", value: " + value);
}
// delete data when u've finished with it.
delete data;