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>
))}