【问题标题】:Javascript check and push dynamically elements in a new arrayJavascript 检查并动态推送新数组中的元素
【发布时间】:2021-12-10 09:58:07
【问题描述】:

我有一个类似以下数据的元素列表

[
    {
        "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]

【问题讨论】:

    标签: javascript arrays list push


    【解决方案1】:

    您需要首先检查整个catalogCategories,而不仅仅是第一个元素product.catalogCategories[0],使用map 并使用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)

    【讨论】:

    • 我理解并且它是正确的,但它没有遵循我的代码,并且它在我的项目中给出了错误,我可以按照我的逻辑得到答案吗?例如,我不能将 categoryData = [ ] 更改为 categoryDataMap = New Map()。谢谢
    • 是的,当然您可以将categoryDataMap 的值分配给categoryData
    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2014-07-29
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多