Javascript 删除重复的数组值,然后存储它们[react]

Javascript 删除重复的数组值,然后存储它们[react],javascript,reactjs,Javascript,Reactjs,我正在尝试从当前数组中删除重复的数组值。我想将新列表(没有重复的列表)存储到一个新变量中 var names = ["Daniel","Lucas","Gwen","Henry","Jasper","Lucas","Daniel"]; const uniqueNames = []; const namesArr = names.filter((val, id) => { names.indexOf(val) == id; // this just returns true })

我正在尝试从当前数组中删除重复的数组值。我想将新列表(没有重复的列表)存储到一个新变量中

var names = ["Daniel","Lucas","Gwen","Henry","Jasper","Lucas","Daniel"];

const uniqueNames = [];
const namesArr = names.filter((val, id) => {
    names.indexOf(val) == id;  // this just returns true
});
如何删除重复的名称并将不重复的名称放入新变量中

伊恩:尤妮克奈姆斯会回来的

["Daniel","Lucas","Gwen","Henry","Jasper"] 

(我正在使用react jsx)谢谢

您忘记在
过滤器
调用中使用
return
语句

const namesArr = duplicatesArray.filter(function(elem, pos) {
    return duplicatesArray.indexOf(elem) == pos;
}); 

你可以一次完成

const uniqueNames = Array.from(new Set(names));
//它将返回一组独特的项目

请注意,@wildwidow指出了您的一个错误-您没有使用return语句。(当我们忘记的时候,这很糟糕,但它发生了!)

我要补充的是,如果考虑到filter(a,b,c)函数的第三个参数,代码可以简化,回调可以更可重用,其中c是被遍历的数组。因此,您可以按如下方式重构代码:

const uniqueNames = names.filter((val, id, array) => {
   return array.indexOf(val) == id;  
});
此外,如果使用es6,甚至不需要返回语句

const uniqueNames = names.filter((val,id,array) => array.indexOf(val) == id);

如果要删除包含相同“id”的重复值,可以使用此选项

const arr = [
  { id: 2, name: "sumit" },
  { id: 1, name: "amit" },
  { id: 3, name: "rahul" },
  { id: 4, name: "jay" },
  { id: 2, name: "ra one" },
  { id: 3, name: "alex" },
  { id: 1, name: "devid" },
  { id: 7, name: "sam" },
  ];


结果:

> Array 
[ 
  { id: 2, name: "sumit" },
  { id: 1, name: "amit" },
  { id: 3, name: "rahul" },  
  { id: 4, name: "jay" },  
  { id: 7, name: "sam" }
]

因为我发现@Infaz的答案代码在某处使用过,这让我非常困惑,所以我想我应该共享重构后的函数

函数getUnique(数组,键){
如果(键的类型!==“函数”){
const属性=键;
键=函数(项){返回项[属性];};
}
返回Array.from(Array.reduce)(函数(map,item){
常数k=键(项目);
如果(!map.has(k))map.set(k,item);
返回图;
},新映射())。值());
}
//范例
常数项=[
{id:2,名称:“sumit”},
{id:1,名称:“amit”},
{id:3,名字:“rahul”},
{id:4,名字:“jay”},
{id:2,名称:“ra one”},
{id:3,名字:“alex”},
{id:1,名称:“devid”},
{id:7,名字:“sam”},
];
log(getUnique(items,'id'));
/*输出:
[ 
{id:2,名称:“sumit”},
{id:1,名称:“amit”},
{id:3,名字:“rahul”},
{id:4,名字:“jay”},
{id:7,名字:“sam”}
]
*/
您也可以这样做

{Array.from(new Set(yourArray.map((j) => j.location))).map((location) => (
          <option value={`${location}`}>{location}</option>
        ))}
{Array.from(新集合(yourray.map((j)=>j.location)).map((location)=>(
{location}
))}

有人对我的原始答案投了更高的票,我删除了这个答案,因为我没有完全理解这个问题(而且可能是错的)。最重要的是,您的过滤器中缺少了一个
返回
@ScottKaye为什么你认为你的解决方案是错误的?@wildwide我不确定他是想让数组包含被删除的元素,还是想让数组包含被删除的元素。@ScottKaye删除重复元素后的数组:)对不起,我应该specified@ScottKaye当我输入解决方案时,在我提交我的解决方案之前,我想我看到了你的解决方案,我相信你已经找到了删除元素和现有元素的答案,这是正确的:)因为我发现这段代码非常混乱,我将重构版本作为一个单独的答案发布。
{Array.from(new Set(yourArray.map((j) => j.location))).map((location) => (
          <option value={`${location}`}>{location}</option>
        ))}