Javascript 组合阵列并删除重复项的最有效方法

Javascript 组合阵列并删除重复项的最有效方法,javascript,arrays,algorithm,sorting,react-native,Javascript,Arrays,Algorithm,Sorting,React Native,使用平面列表并寻找一种有效的方法来组合列表中的元素,同时删除重复的元素。每个元素都有一个唯一的键值,以了解它是否重复 我当前的实现使用concat函数: Array.prototype.unique = function() { var a = this.concat(); for(var i=0; i<a.length; ++i) { for(var j=i+1; j<a.length; ++j) { if(a

使用平面列表并寻找一种有效的方法来组合列表中的元素,同时删除重复的元素。每个元素都有一个唯一的键值,以了解它是否重复

我当前的实现使用concat函数:

Array.prototype.unique = function() {
      var a = this.concat();
      for(var i=0; i<a.length; ++i) {
          for(var j=i+1; j<a.length; ++j) {
              if(a[i].key === a[j].key)
                  a.splice(j--, 1);
          }
      }
      return a;
  };

const OldArray = this.state.data;
const NewArray = [] //contains values we loaded in 
const FinalArray = OldArray.concat(NewArray).unique();

//Update the State
this.setState({
   data: FinalArray
)}
Array.prototype.unique=function(){
var a=this.concat();
对于(var i=0;i您可以使用Array#reduce创建唯一值的映射,然后将其展开回数组。这将使具有相同键的对象第一次出现

const union=(arr1,arr2,key)=>[…//扩展到数组
arr1.concat(arr2)//concat数组
.reduce((m,o)=>m.has(o[key])?m:m.set(o[key],o),new Map)//通过key的值还原为Map
.values()];//获取值迭代器
constoldarray=[{a:1,v:1},{a:2}]
constnewarray=[{a:1,v:100},{a:3}]
const FinalArray=union(OldArray,NewArray,'a')

console.log(FinalArray);
新映射(arr1.concat(arr2.Map(o=>[o[key],o]))
也可以用于创建
映射。确实如此。但是,有一点需要注意。请参阅更新的答案。