Answers:
是的,您可以,不需要lodash ...即
for (var key in myObject.options) {
// check also if property is not inherited from prototype
if (myObject.options.hasOwnProperty(key)) {
var value = myObject.options[key];
}
}
编辑:接受的答案(_.forOwn())应该是https://stackoverflow.com/a/21311045/528262
lodash
而不是仅通过不需要烦人的hasOwnProperty
检查就可以证明其合理性
使用_.forOwn()
。
_.forOwn(obj, function(value, key) { } );
https://lodash.com/docs#forOwn
请注意,在循环对象的属性时,通常需要执行forOwn
checks hasOwnProperty
。forIn
不执行此检查。
key
是,这是第二个参数,但这很有意义
可以肯定地使用stecb所示的香草JS来做到这一点,但是我认为这each
是解决lodash核心问题的最佳答案。
_.each( myObject.options, ( val, key ) => {
console.log( key, val );
} );
就像JohnnyHK提到的那样,还有has
一种方法对于用例set
很有用,但是从最初的描述可能会更有用。假设您想像刚才提到的那样向该对象动态添加一些东西:
let dynamicKey = 'someCrazyProperty';
let dynamicValue = 'someCrazyValue';
_.set( myObject.options, dynamicKey, dynamicValue );
根据原始说明,这就是我要做的。
在ES6中,还可以使用循环遍历对象的值for..of
。但是,对于JavaScript对象而言,这并不是开箱即用的,因为您必须在对象上定义@@ iterator属性。其工作原理如下:
for..of
循环要求“要迭代的对象”(对于迭代器对象,我们将其称为obj1。该循环通过在提供的迭代器对象上依次调用next()方法并使用返回的值作为每次迭代的值来对obj1进行迭代。循环。这是一个例子:
const obj1 = {
a: 5,
b: "hello",
[Symbol.iterator]: function() {
const thisObj = this;
let index = 0;
return {
next() {
let keys = Object.keys(thisObj);
return {
value: thisObj[keys[index++]],
done: (index > keys.length)
};
}
};
}
};
现在我们可以使用for..of
循环了:
for (val of obj1) {
console.log(val);
} // 5 hello