如何在JavaScript中迭代(键、值)?
我有一本字典的格式是如何在JavaScript中迭代(键、值)?,javascript,dictionary,object,iterator,ecmascript-2016,Javascript,Dictionary,Object,Iterator,Ecmascript 2016,我有一本字典的格式是 dictionary = {0: {object}, 1:{object}, 2:{object}} 我如何通过执行以下操作来遍历这本词典 for((key,value) in dictionary){ //Do stuff where key would be 0 and value would be the object } tl;博士 在ECMAScript 2017中,只需调用Object.entries(yourObj) 在
dictionary = {0: {object}, 1:{object}, 2:{object}}
我如何通过执行以下操作来遍历这本词典
for((key,value) in dictionary){
//Do stuff where key would be 0 and value would be the object
}
tl;博士
Object.entries(yourObj)
Map
s'use strict';
const object = {'a': 1, 'b': 2, 'c' : 3};
for (const [key, value] of Object.entries(object)) {
console.log(key, value);
}
输出
ECMAScript 2015 在ECMAScript 2015中,没有
对象。条目
,但您可以使用映射
对象,并使用进行迭代。引用那一页的例子
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"]
或者像这样迭代
'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);
}
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]);
}
}
输出
或
输出
ECMAScript 5: 不,这在物体上是不可能的 您应该使用或像这样进行迭代
'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);
}
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]);
}
}
注意:只有当您想迭代字典
对象本身的属性时,才需要上面的if
条件。因为for..in
将遍历所有继承的可枚举属性
或
试试这个:
var value;
for (var key in dictionary) {
value = dictionary[key];
// your code here...
}
dict = {0:{1:'a'}, 1:{2:'b'}, 2:{3:'c'}}
for (var key in dict){
console.log( key, dict[key] );
}
0 Object { 1="a"}
1 Object { 2="b"}
2 Object { 3="c"}
试试这个:
var value;
for (var key in dictionary) {
value = dictionary[key];
// your code here...
}
dict = {0:{1:'a'}, 1:{2:'b'}, 2:{3:'c'}}
for (var key in dict){
console.log( key, dict[key] );
}
0 Object { 1="a"}
1 Object { 2="b"}
2 Object { 3="c"}
您可以这样做:
dictionary = {'ab': {object}, 'cd':{object}, 'ef':{object}}
var keys = Object.keys(dictionary);
for(var i = 0; i < keys.length;i++){
//keys[i] for key
//dictionary[keys[i]] for the value
}
dictionary={'ab':{object},'cd':{object},'ef':{object}
var keys=Object.keys(字典);
对于(变量i=0;i
ES2017中指定了Object.entries()
方法(现在是):
说明:
接受像Object.entries()
这样的对象,并将其转换为键值对数组:{a:1,b:2,c:3}
[[a',1],[b',2],[c',3]
- 用
,我们可以循环遍历这样创建的数组的条目表示。。。对于
- 因为我们保证每个迭代的数组项本身就是一个两项数组,所以我们可以使用它直接将变量
和key
分配给它的第一项和第二项value
_.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
console.log(n, key);
});
我认为快速简便的方法是
Object.entries(event).forEach(k => {
console.log("properties ... ", k[0], k[1]); });
只需查看文档即可
作为对公认答案的改进,为了减少嵌套,您可以改为这样做,前提是不继承密钥:
for (var key in dictionary) {
if (!dictionary.hasOwnProperty(key)) {
continue;
}
console.log(key, dictionary[key]);
}
编辑:关于
对象的信息。hasOwnProperty
您可以使用下面的脚本
var obj={1:"a",2:"b",c:"3"};
for (var x=Object.keys(obj),i=0;i<x.length,key=x[i],value=obj[key];i++){
console.log(key,value);
}
var obj={1:a',2:b',c:3};
对于(var x=Object.keys(obj),i=0;i欢迎来到2020*ES6中的Drools*
这里有一些非常古老的答案——利用解构。在我看来,这无疑是迭代对象的最好(非常可读)方法
const myObject={
尼克:“凯奇”,
菲尔:“穆雷”,
};
Object.entries(myObject.forEach)([k,v])=>{
log(“键:”,k)
log(“值:”,v)
})
您可以使用JavaScriptforEach
循环:
myMap.forEach((value, key) => {
console.log('value: ', value);
console.log('key: ', key);
});
对于(让[key,value]的Object.entries(obj))
,需要巴别塔。@elclars它在ES2016中,它还没有标准化:-)可能是@doo的重复。在这个问题上,它不是数组。这里有一个基本的疑问。我来到这里是想了解如何在node.js中实现这一点,node.js是服务器端的javascript。我如何知道哪个ES版本适用于我的情况。另外,对于普通的javascript用户,我知道ES版本取决于客户端的浏览器,正确的支持方式是什么?@sandePanath您可以使用一些网站,比如知道Node.js中是否支持特定的ES功能。就浏览器而言,人们通常以广泛支持的版本为目标,在本例中是ES5。除此之外,transpilers(like)帮助将ES2015+代码转换为ES5。我喜欢上面的Object.keys(dictionary).forEach(function(key){…
非常可读,并且兼容。Object.entries(Object).forEach([key,val])=>{…};
ECMAScript 2015解决方案抛出,但简单的ol工作得很好。更好的是:Object.entries(obj).forEach(([key,value])=>{console.log(${key}${value}
);});很好!我喜欢你的答案在ECMAscript 5中的工作方式,尽管被接受和投票最多的答案说这是不可能的。你应该得到更多的投票。#将输出#c3#1a#2b考虑到为你的答案添加解释,代码本身就没有什么帮助。此外,你可以编辑你的答案,注释并不是对答案的扩展你使用它们的方式的答案悲哀的是,人们仍然在使用Internet Explorer。我痛苦地意识到。Babel和polyfill.io解决了这个问题,但它并不令人愉快。请注意:如果你用上面的map
替换forEach
,那么就有可能聚合值。map
将返回所述v的列表值,从而可能以其他方式简化代码。这应该是公认的答案。公认的答案太长了。不,他们不能。myMap
是一个普通对象,而不是数组。它对我有效,尽管你使用了Map
对象而不是问题中使用的普通对象。哦,我明白了,我在搜索Map
对象。我的不好。@SeverinToldo但它适用于es5支持的Map
var obj={1:"a",2:"b",c:"3"};
for (var x=Object.keys(obj),i=0;i<x.length,key=x[i],value=obj[key];i++){
console.log(key,value);
}
myMap.forEach((value, key) => {
console.log('value: ', value);
console.log('key: ', key);
});