我在JavaScript中有一个对象:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
我想用一个for循环来获取它的属性。我想要迭代它的部分(不是所有的对象属性一次)。
对于一个简单的数组,我可以用一个标准的for循环来做:
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
但是如何对对象进行处理呢?
如果你想一次迭代整个对象,你可以使用for in循环:
for (var i in obj) {
...
}
但如果你想把物体分成几部分实际上你做不到。不能保证对象中的属性按任何指定的顺序排列。因此,我可以想到两种解决方案。
首先是“删除”已经读取的属性:
var i = 0;
for (var key in obj) {
console.log(obj[key]);
delete obj[key];
if ( ++i > 300) break;
}
我能想到的另一个解决方案是使用数组的数组而不是对象:
var obj = [['key1', 'value1'], ['key2', 'value2']];
然后,标准for循环将工作。
如果你有一个简单的对象,你可以使用下面的代码迭代它:
let myObj = {
美国广播公司(abc):“…”
bca:“……”
鼾声大作:“……”
xxx:“……”
ccc:“……”
/ /……
};
let objKeys = Object.keys(myObj);
//现在我们可以使用objKeys遍历myObj
for (item of objKeys) {
//这将打印密钥
console.log(关键:,项);
//这将打印出值
console.log(价值:,myObj[项目]);
}
如果你有一个嵌套对象,你可以使用下面的代码遍历它:
设b = {
一:{
答:1,
b: 2
c: 3
},
二:{
4,
b: 5
c: 6
},
三:{
7,
b: 8
c: 9
}
};
let myKeys = Object.keys(b);
for (item of myKeys) {
//打印密钥
console.log(“关键”,项目)
//打印值(这将是另一个对象)
console.log(“价值”,b[项目])
//打印嵌套值
console.log('嵌套值',b[item]['a'])
}
如果你有一个对象数组,你可以使用下面的代码遍历它:
令c = [
{
答:1,
b: 2
},
{
答:3,
b: 4
}
];
对于(c项){
//单独打印整个对象
console.log(“对象”,项目);
//打印对象内部的值
console.log(“价值”,项目[a]);
}
在参数中定义object,避免选择器和下标
有许多语法选择,但这个在闭包的参数中定义了前面的对象,从而消除了迭代器中选择器或下标的需要。K是键,v是值,I是索引。
const obj = {
kiwi: true,
mango: false,
pineapple: 500
};
Object.entries(obj).forEach(([k, v], i) => {
console.log(k, v, i);
});
// kiwi true 0
// mango false 1
// pineapple 500 2
是的。可以使用for loop循环遍历对象。这里有一个例子
var myObj =
abc:’ABC’,
gac:’BCA’,
zzz:’ZZZ’,
xxx:’XXX’,
ccc:’CCC’,
)
var k =目标。群岛(myObj);
for (var i = 0;i < k.length;i + +) (
控制台日志(k[i] +:“+ myObj[k[i]];
)
注意:上面提到的例子只适用于IE9+。看到Objec。键浏览器支持在这里。
对于迭代数组、字符串或对象的键,使用For ..:
for (let key in yourobject) {
console.log(key, yourobject[key]);
}
在ES6中,如果你同时需要键和值,那就这样做
for (let [key, value] of Object.entries(yourobject)) {
console.log(key, value);
}
为了避免记录继承的属性,检查hasOwnProperty:
for (let key in yourobject) {
if (yourobject.hasOwnProperty(key)) {
console.log(key, yourobject[key]);
}
}
如果你正在使用一个简单的对象(例如你自己用{}创建的对象)迭代键时,你不需要检查hasOwnProperty。
MDN文档更一般地解释了如何处理对象及其属性。
如果你想“大块”地执行,最好是在数组中提取键。由于订单不能保证,这是正确的方式。在现代浏览器中,您可以使用
let keys = Object.keys(yourobject);
为了更加兼容,你最好这样做:
let keys = [];
for (let key in yourobject) {
if (yourobject.hasOwnProperty(key)) keys.push(key);
}
然后你可以通过索引迭代你的属性:
for (let i=300; i < keys.length && i < 600; i++) {
console.log(keys[i], yourobject[keys[i]]);
}