[英]return key value pair from object whose key matches certain condition with javascript and underscore
[英]Return key of object whose value is an object that contains a property that matches a condition
我有一個對象
const CABLE_SOURCES = {
foxnews: {
id: "FOXNEWSW",
name: "Fox News",
},
cnn: {
id: "CNNW",
name: "CNN",
},
msnbc: {
id: "MSNBCW",
name: "MSNBC",
},
abc7: {
id: "KGO",
name: "ABC 7 news",
},
};
我目前的解決方案看起來像
function getKeyName(cableSourceId) {
let source = null;
for (let s in CABLE_SOURCES) {
if (CABLE_SOURCES[s].id === cableSourceId) {
source = s;
}
break;
}
return source;
}
getKeyName("FOXNEWSW")
// foxnews
是否有更實用/更優雅的方式來重寫getKeyName
,無論是使用 ES6 還是 lodash?
一種選擇是.find
其值具有該id
的對象條目之一。 如果找到這樣的條目,則返回其中的第一項(鍵),否則返回null
:
const CABLE_SOURCES = { foxnews: { id: "FOXNEWSW", name: "Fox News", }, cnn: { id: "CNNW", name: "CNN", }, msnbc: { id: "MSNBCW", name: "MSNBC", }, abc7: { id: "KGO", name: "ABC 7 news", }, }; function getKeyName(cableSourceId) { const foundEntry = Object.entries(CABLE_SOURCES).find(([, { id }]) => id === cableSourceId); return foundEntry ? foundEntry[0] : null; } console.log(getKeyName("FOXNEWSW")); console.log(getKeyName("foo"));
我猜你可以使用Object.keys()
和Array.prototype.find()
組合。 一旦你找到了對象,只需要訪問name
屬性。
Object.keys()
文檔說明:
Object.keys() 方法返回給定對象自己的可枚舉屬性名稱的數組,其順序與我們使用普通循環獲得的順序相同。
Array.prototype.find()
文檔說明:
find() 方法返回提供的數組中滿足提供的測試函數的第一個元素的值。
像下面這樣:
const CABLE_SOURCES = { foxnews: { id: "FOXNEWSW", name: "Fox News", }, cnn: { id: "CNNW", name: "CNN", }, msnbc: { id: "MSNBCW", name: "MSNBC", }, abc7: { id: "KGO", name: "ABC 7 news", }, }; const getKeyName = text => CABLE_SOURCES[Object.keys(CABLE_SOURCES).find(i => CABLE_SOURCES[i].id === text)].name; const result = getKeyName("FOXNEWSW"); console.log(result);
我希望這有幫助!
Lodash 有一個_.findKey()
方法,它接受一個謂詞(在這種情況下是對象),並返回具有與謂詞匹配的值的第一個鍵:
function getKeyName(id) { return _.findKey(CABLE_SOURCES, { id }); } const CABLE_SOURCES = {"foxnews":{"id":"FOXNEWSW","name":"Fox News"},"cnn":{"id":"CNNW","name":"CNN"},"msnbc":{"id":"MSNBCW","name":"MSNBC"},"abc7":{"id":"KGO","name":"ABC 7 news"}}; console.log(getKeyName("FOXNEWSW")); console.log(getKeyName("foo"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.