JavaScript如何基于嵌套数组中的值在数组中查找唯一值

JavaScript如何基于嵌套数组中的值在数组中查找唯一值,javascript,arrays,set,Javascript,Arrays,Set,我有一个嵌套/多维数组,如下所示: [strong>1,1,a],1,1,b],2,2,c],1,1,d]] 我想对它进行过滤,以便它根据每个嵌套数组的1st值只返回外部数组的唯一值 因此,从上面的数组中,它将返回: [ [1,1,a] [2,2,c] ] 如果可能的话,我会尝试用香草javascript来实现这一点。感谢您的宝贵意见!=) 这是我的解决方案 const dedup = arr.filter((item, idx) => arr.findIndex(x => x[0

我有一个嵌套/多维数组,如下所示:

[strong>1,1,a],1,1,b],2,2,c],1,1,d]]

我想对它进行过滤,以便它根据每个嵌套数组的1st值只返回外部数组的唯一值

因此,从上面的数组中,它将返回:

[ [1,1,a] [2,2,c] ]
如果可能的话,我会尝试用香草javascript来实现这一点。感谢您的宝贵意见!=)

这是我的解决方案

const dedup = arr.filter((item, idx) => arr.findIndex(x => x[0] == item[0]) == idx)

它看起来很简单,但也有点棘手。

使用键作为数组的第一个元素创建对象。迭代数组,检查数组的第一个元素是否存在于对象中,如果不存在,则推送到数组中

const nestedArr=[[1,1,“a”],[1,1,“b”],[2,2,“c”],[1,1,“d”];
常量输出={};
对于(让nestedArr的arr){
如果(!输出[arr[0]]){
输出[arr[0]]=arr;
}
}

console.log(Object.values(output))我意识到已经有三种解决方案,但我不喜欢它们。我的解决办法是

  • 通用-您可以将unique与任何选择器函数一起使用
  • O(n)-它使用一个集合,它不会在O(n^2)时间内运行
  • 这就是:

    /**
    *@param arr-获取的唯一值的数组
    *@param uniqueBy-获取该值并选择一个应获取唯一值的标准
    * 
    *@返回包含原始值的新数组
    * 
    *@example unique([“hello”、“hello”、“friend”],s=>s.toLowerCase())/[“hello”、“friend”]
    */
    功能唯一(arr、唯一){
    const temp=新集合()
    返回arr.filter(v=>{
    计算常数=唯一性(v)
    const isContained=温度已(计算)
    温度添加(计算)
    回来!我被控制住了
    })
    }
    常量arr=[[1,1,a'],[1,1,b'],[2,2,c'],[1,1,d']]
    
    log(unique(arr,v=>v[0])
    您可以使用一组和给定的索引进行筛选

    const
    uniqueByIndex=(i,s=新集合)=>array=>!s、 has(array[i])&s.add(array[i]),
    数据=[[1,1,a'],[1,1,b'],[2,2,c'],[1,1,d'],
    结果=data.filter(uniqueByIndex(0));
    控制台日志(结果)
    
    const input=[[1,1,'a'],[1,1,'b'],[2,2,'c'],[1,1,'d']
    const res=input.reduce((acc,e)=>acc.find(x=>x[0]==e[0]))
    ?acc
    :[…附件,e],]
    
    console.log(res)
    什么不起作用?欢迎使用堆栈溢出!这不是一个人们为你编写代码的网站,这样你就不必这么做。如果您需要帮助调试您所编写的代码,则必须发布一篇文章,并解释代码的具体问题。此代码是ES5编写的。适用于所有浏览器。请注意,此解决方案为O(n^2),因此,如果
    arr
    较大,则不理想。