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

从数组中获取元素的索引,当从另一个数组中减去具有相同索引的元素时,该索引为负数

  •  1
  • Mehdi  · 技术社区  · 1 年前

    如问题中所示(可能没有正确表述),我试图得到一个数组的索引,对于该数组,其每个元素与第二个数组的对应索引元素之间的差值<0.也许下面的代码可以解释更多我想要获得的东西。我成功地使用flatMap()函数获得了所需的索引,但无法使用filter()函数得到它,我认为在这种情况下更合适(总是在这里得到元素,而不是索引)

    let array1 = ['524', '587', '034', '816', '65', '7']
    let array2 = ['3', '0', '33', '4', '193', '13']
    
    
    
    function getSumOfArrays(array1, array2){
        let sumArray = array1.map((elem,idx)=>parseFloat(elem) - parseFloat(array2[idx]))
        return sumArray
    }
    
    function getIdxNegativeDiff1(array1, array2){   //this function works   
        let negatifIdx1 = array1.flatMap((elem,idx)=>{return parseFloat(elem)-parseFloat(array2[idx]) < 0 ? idx : [] })
        return negatifIdx1
    }
    
    function getIdxNegativeDiff2(array1, array2){          
        let negatifIdx2 = array1.filter((elem,idx)=>{ return (parseFloat(elem)-parseFloat(array2[idx]) < 0 ? idx : '')})
        return negatifIdx2
    }
    
    
    
    console.log(array1)
    console.log(array2)
    console.log(getSumOfArrays(array1, array2))
    console.log(getIdxNegativeDiff1(array1, array2))
    console.log(getIdxNegativeDiff2(array1, array2))

    尝试了许多可能性,但无法通过过滤器找到解决方案。有人能提供解决方案吗

    1 回复  |  直到 1 年前
        1
  •  2
  •   mykaf    1 年前

    你真的很接近! getIdxNegativeDiff2() 正在过滤<0,你只需要在原始数组中找到这些值的索引,你可以用 Array.map() :

    let array1 = ['524', '587', '034', '816', '65', '7']
    let array2 = ['3', '0', '33', '4', '193', '13']
    
    
    function getIdxNegativeDiff2(array1, array2){          
        let negatifIdx2 = array1.filter(
            (elem,idx)=>{ 
            return (parseFloat(elem)-parseFloat(array2[idx]) < 0 ? idx : '')
          }
        ).map(el => array1.indexOf(el)) 
        return negatifIdx2
    }
    
    console.log("array1",array1)
    console.log("array2",array2)
    
    console.log("getIdxNegativeDiff2",getIdxNegativeDiff2(array1, array2))