是否可以遍歷JavaScript對象中的屬性?舉例來說,我已經定義爲這樣的JavaScript對象:使用Lodash循環瀏覽JavaScript對象中的屬性
myObject.options = {
property1: 'value 1',
property2: 'value 2'
};
屬性將得到動態添加到該對象。有沒有辦法讓我循環通過並檢查一個屬性是否存在?如果是這樣,怎麼樣?
是否可以遍歷JavaScript對象中的屬性?舉例來說,我已經定義爲這樣的JavaScript對象:使用Lodash循環瀏覽JavaScript對象中的屬性
myObject.options = {
property1: 'value 1',
property2: 'value 2'
};
屬性將得到動態添加到該對象。有沒有辦法讓我循環通過並檢查一個屬性是否存在?如果是這樣,怎麼樣?
當然可以,並不需要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的has
。
var exists = _.has(myObject, propertyNameToCheck);
這是OP實際描述的需求的最佳答案。問題標題是誤導性的。 –
這將有助於理解你爲什麼需要用lodash做到這一點。如果你只是想檢查一個對象中是否存在一個鍵,你不需要lodash。
myObject.options.hasOwnProperty('property');
如果你想看看是否存在一個值,你可以使用_.invert
_.invert(myObject.options)[value]
在ES6,還可以遍歷使用for..of
循環對象的值。然而,這對於JavaScript對象而言並不適用,因爲您必須在對象上定義@@ iterator屬性。這種工作方式如下:
for..of
循環詢問「要遍歷對象」(姑且稱之爲OBJ1一個迭代器對象在OBJ1循環迭代通過連續調用next()方法所提供的迭代器。對象並使用返回值作爲循環的每次迭代的值下面是一個例子:
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 funct-style,我只是讓OP明白你可以根據庫來循環obj w/out(如果他只是想要包含lodash的功能) – stecb
在這種情況下,提供兩種答案本來就不錯。 – flq
而且速度也更快。但更冗長,可讀性更差。 –