代码之家  ›  专栏  ›  技术社区  ›  alex

测试是否使用“every”提取了项,这不是预期的工作方式

  •  1
  • alex  · 技术社区  · 7 年前

    我在取新的标记。我在测试他们是否是根据他们的身份被抓到的:

    // newMarkers = [{ id: 1 }, { id: 2}]
    // state.fetchedMarkers = [{ id: 1 }]
    
    newMarkers.forEach(marker => {
      if (state.fetchedMarkers.every(fetchedMarker => fetchedMarker.id === marker.id)) {
        console.log('newMarkers HAVE BEEN fetched')
      } else {
        console.log('newMrakers HAVEN'T BEEN fetched')
        state.fetchedMarkers.concat(newMarkers)
        // they haven't been fetched so I'm putting them in the fetched array
      }
    })
    

    但不管我做什么,“被抓到”总是跑,“没被抓到”从不跑。

    也许我的if陈述有问题?或者也许 every 这不是正确的选择吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Isaac    7 年前

    let newMarkers = [{ id: 1 }, { id: 2}]
    let fetchedMarkers = [{ id: 1 }]
    
    newMarkers.forEach(marker => {
      if (fetchedMarkers.every(fetchedMarker => fetchedMarker.id === marker.id)) {
        console.log('newMarkers HAVE BEEN fetched')
      } else {
        console.log('newMrakers HAVENT BEEN fetched')
        fetchedMarkers.concat(newMarkers)
        // they haven't been fetched so I'm putting them in the fetched array
      }
    })

    您共享的代码不完整,或者 newMarkers fetchedMarkers 都是不完整的 if else 正在使用您提供的代码运行。只要点击 Run code snippet

        2
  •  1
  •   Karan    7 年前

    使用fetchedmarkers.every将检查每个对象是否与ID匹配。因此,如果fetchedmarkers数组的值大于1,它将给出错误的答案。替换fetchedmarkers.every to fetchedmarkers.some将工作正常。

    let newMarkers = [{ id: 1 }, { id: 2}]
    let fetchedMarkers = [{ id: 1 }, { id: 3 }]
    
    newMarkers.forEach(marker => {
      if (fetchedMarkers.some(fetchedMarker => fetchedMarker.id === marker.id)) {
        console.log('newMarkers HAVE BEEN fetched')
      } else {
        console.log('newMrakers HAVENT BEEN fetched')
        fetchedMarkers.concat(newMarkers)
        // they haven't been fetched so I'm putting them in the fetched array
      }
    })