使用Lodash循环浏览JavaScript对象中的属性
是否有可能通过JavaScript对象中的属性循环? 例如,我有一个JavaScript对象定义为:
myObject.options = { property1: 'value 1', property2: 'value 2' }; 属性将被dynamic地添加到这个对象。 有没有办法让我循环,做一个检查,如果一个财产存在? 如果是这样,怎么样?
是的,你可以和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
 使用_.forOwn() 。 
 _.forOwn(obj, function(value, key) { } ); 
https://lodash.com/docs#forOwn
 请注意, forOwn检查hasOwnProperty ,因为在循环对象的属性时通常需要执行此操作。  forIn不做这个检查。 
对于你所说的“检查财产是否存在”的愿望,你可以直接使用Lo-Dash的。
 var exists = _.has(myObject, propertyNameToCheck); 
 在ES6中,也可以使用for..of循环迭代对象的值。 但是,这对于JavaScript对象不能正常工作,因为您必须在对象上定义@@ iterator属性。 这工作如下: 
-   for..of循环会询问“要迭代的对象”(我们将其称为obj1)迭代器对象。循环通过在所提供的迭代器对象上连续调用next()方法来迭代obj1,并使用返回的值作为循环的每个迭代的值。
- 迭代器对象是通过调用obj1的@@ iterator属性或Symbol.iterator属性中定义的函数获得的。 这是你必须自己定义的函数,它应该返回一个迭代器对象
这里是一个例子:
 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 
理解为什么你需要用lodash做这个将是有帮助的。 如果你只是想检查一个对象是否存在一个键,你不需要lodash。
 myObject.options.hasOwnProperty('property'); 
 如果您正在查看是否存在值,则可以使用_.invert 
 _.invert(myObject.options)[value]