簡體   English   中英

Javascript檢查並動態推送新數組中的元素

[英]Javascript check and push dynamically elements in a new array

我有一個元素列表,如以下數據

[
    {
        "title": "First",
        "catalogCategories": [ "sport", "economy" ]
    },
    {
        "title": "Second",
        "catalogCategories": [ "politics", "tourism" ]
    },
    {
        "title": "Third",
        "catalogCategories": [ "sport", "universe" ]
    },
    {
        "title": "Fourth",
        "catalogCategories": [ "economy", "politics" ]
    }
]

我正在檢查列表中的每個元素是否存在catalogCategories數組,如果存在,我將任何元素的類別推catalogData數組中僅一次,因為碰巧任何元素的類別都可以相同,我正在過濾catalogData數組catalogCategories元素的所有類別

這是以下代碼

  let categoryData = [];
  let isCategory = false

  for (let product of list) {
    if (product.catalogCategories[0].length > 0) {
      isCategory = true
      let isFound = false
      for (let i = 0; i < categoryData.length; i++) {
        if (categoryData[i].value === product.catalogCategories[0] || 
            categoryData[i].value === product.catalogCategories[1] ) {
          isFound = true;
        }
      }
      if (!isFound) {
        categoryData.push({"name": "catalogCategories", "label": product.catalogCategories[0], "selected": false, "value": product.catalogCategories[0]})
      }
    }

我的問題在這里

  if (!isFound) {
    categoryData.push({"name": "catalogCategories", "label": product.catalogCategories[0], "selected": false, "value": product.catalogCategories[0]})
  }

正如您所看到的,在所有這些檢查之后,我總是只推送catalogCategories的第一個元素,我如何動態寫下我可以推送第一個和/或第二個元素?

"value": product.catalogCategories[0]
"label": product.catalogCategories[0]

您需要首先使用map檢查整個catalogCategories而不僅僅是第一個元素product.catalogCategories[0]並使用new Map來跟蹤不重復的類別。

 const list = [ { "title": "First", "catalogCategories": [ "sport", "economy" ] }, { "title": "Second", "catalogCategories": [ "politics", "tourism" ] }, { "title": "Third", "catalogCategories": [ "sport", "universe" ] }, { "title": "Fourth", "catalogCategories": [ "economy", "politics" ] } ] let categoryDataMap = new Map(); for (let product of list) { if (product.catalogCategories.length > 0) { product.catalogCategories.map(catalog=>{ if(!categoryDataMap.has(catalog)){ categoryDataMap.set(catalog,{"name": "catalogCategories", "label": catalog, "selected": false, "value": catalog}) } }) } } const categoryData = Array.from(categoryDataMap.values()) console.log(categoryData)

暫無
暫無

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

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