tl; dr
- Trong ECMAScript 5 , Điều đó là không thể.
- Trong ECMAScript 2015, có thể với
Map
s.
- Trong ECMAScript 2017, nó sẽ có sẵn.
ECMAScript 5:
Không, không phải của nó có thể với các đối tượng.
Bạn có thể phải lặp với for..in
, hoặc Object.keys
, như thế này
for (var key in dictionary) {
// check if the property/key is defined in the object itself, not in parent
if (dictionary.hasOwnProperty(key)) {
console.log(key, dictionary[key]);
}
}
Lưu ý: Điều kiện if
trên là cần thiết, chỉ khi bạn muốn lặp các thuộc tính đó là dictionary
đối tượng rất riêng. Bởi vì for..in
sẽ lặp qua tất cả các thuộc tính đếm được kế thừa.
Hoặc
Object.keys(dictionary).forEach(function(key) {
console.log(key, dictionary[key]);
});
ECMAScript 2015
Trong ECMAScript năm 2015, bạn có thể sử dụng Map
đối tượng và lặp chúng với Map.prototype.entries
. Trích dẫn ví dụ từ trang đó,
var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
var mapIter = myMap.entries();
console.log(mapIter.next().value); // ["0", "foo"]
console.log(mapIter.next().value); // [1, "bar"]
console.log(mapIter.next().value); // [Object, "baz"]
Hoặc lặp với for..of
, như
'use strict';
var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
for (const entry of myMap.entries()) {
console.log(entry);
}
Output này
[ '0', 'foo' ]
[ 1, 'bar' ]
[ {}, 'baz' ]
Hoặc
for (const [key, value] of myMap.entries()) {
console.log(key, value);
}
Output
0 foo
1 bar
{} baz
ECMAScript 2017
ECMAScript 2017 sẽ giới thiệu một chức năng mới Object.entries
. Bạn có thể sử dụng điều này để lặp lại đối tượng như bạn muốn.
'use strict';
const object = {'a': 1, 'b': 2, 'c' : 3};
for (const [key, value] of Object.entries(object)) {
console.log(key, value);
}
Output
a 1
b 2
c 3
'cho (hãy [key, value] của Object.entries (obj)) ', cần Babel. – elclanrs
[có thể trùng lặp] (http://stackoverflow.com/questions/7241878/for-in-loops-in-javascript-key-value-pairs) – Tholle
@elclanrs Trong ES2016 và chưa được chuẩn hóa :-) – thefourtheye