我在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
但是如何对对象进行处理呢?
实际上,PITA不是标准Javascript的一部分。
/**
* Iterates the keys and values of an object. Object.keys is used to extract the keys.
* @param object The object to iterate
* @param fn (value,key)=>{}
*/
function objectForEach(object, fn) {
Object.keys(object).forEach(key => {
fn(object[key],key, object)
})
}
注意:我将回调参数切换为(value,key),并添加了第三个对象以使API与其他API保持一致。
像这样使用它
const o = {a:1, b:true};
objectForEach(o, (value, key, obj)=>{
// do something
});
使用对象。你这样做。
// array like object with random key ordering
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'],['7', 'c'],['100', 'a'] ]
object .entries()方法返回给定对象自身可枚举属性[key, value]的数组。
你可以遍历对象每个对象都有键和值,得到这样的东西。
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
Object.entries(anObj).map(obj => {
const key = obj[0];
const value = obj[1];
// do whatever you want with those values.
});
或者像这样
// Or, using array extras
Object.entries(obj).forEach(([key, value]) => {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
});
参考MDN文档中的对象条目
实际上,PITA不是标准Javascript的一部分。
/**
* Iterates the keys and values of an object. Object.keys is used to extract the keys.
* @param object The object to iterate
* @param fn (value,key)=>{}
*/
function objectForEach(object, fn) {
Object.keys(object).forEach(key => {
fn(object[key],key, object)
})
}
注意:我将回调参数切换为(value,key),并添加了第三个对象以使API与其他API保持一致。
像这样使用它
const o = {a:1, b:true};
objectForEach(o, (value, key, obj)=>{
// do something
});
在参数中定义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