簡體   English   中英

如何檢查至少有一個具有特定網址的嵌套對象

[英]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 ,進行filtermap以獲取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

從JS數組中刪除重復的值

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM