一、用法介紹
在ES2017 (ECMA8)中,引入了新的方法object.values(),該方法可以將一個對象的所有屬性的值以數組的形式返回。這個方法非常方便,因為在JavaScript中訪問對象的屬性時,我們通常是需要遍歷對象所有的屬性,並單獨取出值這就需要我們寫循環遍歷的代碼,非常繁瑣。而使用object.values()則可以避免這種不必要的麻煩。
constobject1={a:'value1',b:'value2',c:'value3'}; console.log(Object.values(object1));//['value1','value2','value3']
二、使用場景
object.values()方法的最常見用途就是獲取對象的值,它方便、快捷,可以用來迭代和過濾對象的值。
1、迭代對象的屬性值
在很多情況下,我們需要迭代對象的屬性值,比如說打印一個對象的所有值,或者檢查對象的所有值是否符合某個條件。在這種情況下,使用 object.values() 函數可以讓代碼顯得更直觀方便。
constperson={ name:'Jack', age:25, job:'programmer', address:{ city:'Shanghai', street:'NanjingRoad' } }; Object.values(person).forEach(value=>console.log(value)); //prints"Jack",25,"programmer",{city:"Shanghai",street:"NanjingRoad"}
上面這個例子中,我們使用Object.values() 和 forEach() 迭代了person對象所有值。
2、獲取對象的屬性值並過濾
在某些情況下,我們可能需要篩選對象值數組上符合某些條件的值。事先,我們可以使用 Array.filter() 方法過濾數據的值數組:
constperson={ name:'Jack', age:25, job:'programmer', address:{ city:'Shanghai', street:'NanjingRoad' } }; constjobIsProgrammer=value=>value==='programmer'; constprogrammerValues=Object.values(person).filter(jobIsProgrammer); console.log(programmerValues);//["programmer"]
在這個例子中,我們使用Object.values()來獲取person對象的每一個屬性的值,之後再通過 Array.filter() 方法篩選出了符合判斷條件的值:佔據職業為程序員的值。
三、結合其他方法的用法
object.values() 方法可以和同樣方便快捷的方法object.keys()結合使用,一起來獲取對象中屬性的值和對應的鍵。
constobject1={a:'value1',b:'value2',c:'value3'}; constkeys=Object.keys(object1); constvalues=Object.values(object1); constentries=Object.entries(object1); console.log(keys);//['a','b','c'] console.log(values);//['value1','value2','value3'] console.log(entries);//[['a','value1'],['b','value2'],['c','value3']]
在這個例子中,我們將對象object1通過Object.keys()和Object.values()以及Object.entries()分別轉化為鍵數組、值數組以及[鍵,值]對數組。這實際上是一種比較常見的操作,可以在Ajax請求中對多次讀取對象的值。
四、使用object.values()迭代對象時,請記得使用for-of循環
雖然我們在上面的很多例子中都使用了forEach()循環,但是實際上使用for-of循環更為安全:因為在迭代對象時,我們不能保證每個對象都支持 forEach() 這個方法,而使用ES6新增的for-of循環可以保證使用的是合法的迭代方法。在代碼中使用for-of來迭代對象,可以保證代碼的兼容性和穩定性。
varobj={a:1,b:2,c:3}; //for...of循環讀取對象的值 for(varvalofObject.values(obj)){ console.log(val); }//123
五、總結
object.values()方法是一個非常實用的方法,極大地簡化了訪問對象的屬性值的過程,並且兼容性較好。我們可以使用它來迭代對象的屬性值,或者過濾對象的值數組,並且可以結合object.keys()方法來同時獲取對象的屬性和屬性值。
原創文章,作者:MJQHK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/372746.html