我得到兩個不同的結果,這取決于我是在函式中記錄結果還是回傳它并記錄變數,我不明白為什么。他們不應該是一樣的嗎?
const collectionMap = {
'615679ba94212894224f547c': 'Value One',
'615679ba94212894224f5480': 'Value Two',
'615679ba94212894224f5482': 'Value Three',
'615679ba94212894224f5486': 'Value Four',
'615679ba94212894224f548a': 'Value Five',
'615679bb94212894224f548e': 'Value Six',
}
let id = '615679bb94212894224f548e'
// this will log the key
const collection = Object.keys(collectionMap).find((key) => {
if (key === id) return collectionMap[key];
});
console.log(collection);
// this will log the value
const collection2 = Object.keys(collectionMap).find((key) => {
if (key === id) console.log(collectionMap[key]);
});
uj5u.com熱心網友回復:
Array 方法find回傳迭代器為其回傳真值的第一個元素。對于前五個值,回傳值是未定義的,對于第六個,它回傳'Value Six'(非空字串)。該非空字串被強制轉換為布林值(try !!'Value Six'),結果為true. 因此,該密鑰被回傳,這就是您列印的內容。
find在第二種情況下,您只是在濫用職權forEach。
uj5u.com熱心網友回復:
.find將回傳陣列(鍵陣列)中回呼函式的值為
但為了清楚起見,如果在控制臺中寫了這個:
console.log(collectionMap["615679bb94212894224f548e"])
JS會記錄“Value Six”,這是因為JS在collectionMap中搜索了“615679bb94212894224f548e”來罰款它的值
所以如果你寫這段代碼:
const collection4 = Object.keys(collectionMap).find((key) => {
console.log(collectionMap[key]);
});
這將在幕后發生:
- collectionMap["615679ba94212894224f547c"] => 值一
- collectionMap["615679ba94212894224f5480"] => 值二
- collectionMap["615679ba94212894224f5482"] => 值三
- collectionMap["615679ba94212894224f5486"] => 值四
- collectionMap["615679ba94212894224f548a"] => 價值五
- collectionMap["615679bb94212894224f548e"] => 值六
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/442109.html
標籤:javascript
上一篇:根據陣列中的值過濾物件
