[英]How do I check if there is at least one nested object that has a specific url
因此,這是POJO:
var foodwebsites = {
"bacon": [{
"url": "stackoverflow.com",
}],
"icecream": [{
"url": "example.com",
}],
"cheese": [{
"url": "example.com",
}]
}
我想做的是使用if語句執行類似的操作:
if (there is at least one nested object with a "url") {
$('body').append("<div>" + url +"</div>");
}
這樣最終結果應該是:
(HTML)
<body>
<div>stackoverflow.com</div>
<div>example.com</div>
</body>
如果您不明白我的問題,請告訴我,我會盡力解釋一下。
對於有效的答案,我在評論中的某處說了“該作品”或“該作品”,以便查看此問題的人可以輕松找到他們的答案。
如果要提取所有唯一的URL,則可以使用Object.values
將對象轉換為數組。 使用Set和flatMap獲取唯一值。
var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ "url": "example.com", }, { "url": "example2.com", }] } var result = [...new Set(Object.values(foodwebsites).flatMap(o => o.map(v => v.url))).values()] //Loop thru the result array and append it to body result.forEach(function(o) { $("body").append("<div>" + o + "</div>"); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
如果要檢查對象上是否包含某個URL,可以使用Object.values
將對象轉換為數組。 用some
檢查元素0的URL。
var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ //2 URLS for cheese "url": "example.com", }, { "url": "example2.com", }] } var result = Object.values(foodwebsites).some(o => o.some(v => v.url === "example2.com")) console.log(result);
使用Object.values
,進行filter
和map
以獲取URL,然后使用forEach
將其放置在頁面上:
var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ "url": "example.com", }] }; var urls = [...new Set(Object.values(foodwebsites).filter(item => item.some(({ url }) => url)).map(item => item.map(({ url }) => url)).reduce((acc, curr) => acc.concat(curr)))]; urls.forEach(url => document.body.innerHTML += `<div>${url}</div>`);
您可以使用Set
來獲取唯一的網址並將其附加到body
var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ "url": "example.com", }] } const urls = Object.values(foodwebsites) .flat() .reduce((set, a) => a.url ? set.add(a.url) : set, new Set) for (let url of urls) { $('body').append("<div>" + url +"</div>"); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <body> </body>
試試這個代碼:
let urls = Object.values(foodwebsites).reduce((prev, item) => prev += item[0].url ? `<div>${item[0].url}<div>` : "", "");
if(urls !== "")$('body').append("<div>" + urls +"</div>");
您可以使用array.some
如果嵌套數組只有一個對象
var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ "url": "example.com", }] } const ifUrl = Object.values(foodwebsites).some(values => values[0] && values[0].url === 'example.com') console.log(ifUrl)
如果嵌套數組可以包含多個元素,並且任何人都可以擁有鍵URL
var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ "url": "example.com", }] } const ifUrl = Object.values(foodwebsites).some(values => values.some(v => v.url === 'example.com')) console.log(ifUrl)
晚會晚了一點,但這是我的做法。
鑒於:
var foodwebsites = {
"bacon": [{
"url": "stackoverflow.com",
}],
"icecream": [{
"url": "example.com",
}],
"cheese": [{
"url": "example.com",
}]
}
const result = Object.values(foodwebsites)
.flatMap((item)=>{return item})
.map((item)=>{return item.url})
.reduce((collection,item)=>{if (collection.indexOf(item) < 0) collection.push(item); return collection}, []);
// Outputs: ["stackoverflow.com", "example.com"]
由於我們使用的是flatMap運算符,因此以下代碼是安全的:
var foodwebsites = {
"bacon": [
{"url": "stackoverflow.com"},
{"url":"another.com"}],
"icecream": [
{"url": "example.com"}],
"cheese": [
{"url": "example.com"},
{"url": "stackoverflow.com"}]
}
//Output: ["stackoverflow.com", "another.com", "example.com"]
然后:
result.forEach((url)=>{$('body').append("<div>" + url +"</div>");})
進一步閱讀:
https://gists.cwidanage.com/2018/06/how-to-iterate-over-object-entries-in.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.