Javascript 通过使用两个元素进行检查,从数组中获取重复的值
如果我的数组有以下数据Javascript 通过使用两个元素进行检查,从数组中获取重复的值,javascript,arrays,typescript,ecmascript-6,Javascript,Arrays,Typescript,Ecmascript 6,如果我的数组有以下数据 let array = [{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 }, { name: "Suresh", SalseVersion: 12, MarketingCode: 13 }, { name: "Siva", SalseVersion: 10, MarketingCode: 14 }, { name: "Sakthi", SalseVersion:
let array = [{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
{ name: "Suresh", SalseVersion: 12, MarketingCode: 13 },
{ name: "Siva", SalseVersion: 10, MarketingCode: 14 },
{ name: "Sakthi", SalseVersion: 10, MarketingCode: 11 },...]
let array = [{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
{ name: "Suresh", SalseVersion: 12, MarketingCode: 14},
{ name: "Siva", SalseVersion: 12, MarketingCode: 14 },
{ name: "Sakthi", SalseVersion: 10, MarketingCode: 11 },...]
那么我期待下面的结果
[{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
{ name: "Sakthi", SalseVersion: 10, MarketingCode: 11 }]
如果我的数组有以下数据
let array = [{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
{ name: "Suresh", SalseVersion: 12, MarketingCode: 13 },
{ name: "Siva", SalseVersion: 10, MarketingCode: 14 },
{ name: "Sakthi", SalseVersion: 10, MarketingCode: 11 },...]
let array = [{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
{ name: "Suresh", SalseVersion: 12, MarketingCode: 14},
{ name: "Siva", SalseVersion: 12, MarketingCode: 14 },
{ name: "Sakthi", SalseVersion: 10, MarketingCode: 11 },...]
那么我期待下面的结果
[{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
{ name: "Sakthi", SalseVersion: 10, MarketingCode: 11 }
{ name: "Suresh", SalseVersion: 12, MarketingCode: 14},
{ name: "Siva", SalseVersion: 12, MarketingCode: 14 }]
我试过这样做:
let arr=[{name:“Ramesh”,salservision:10,MarketingCode:11},
{名称:“Suresh”,销售代码:12,销售代码:13},
{名称:“湿婆”,销售代码:10,销售代码:14},
{名称:“Sakthi”,销售代码:10,销售代码:11}]
var sorted_arr=arr.slice().sort();
var结果=[];
对于(变量i=0;i 控制台日志(结果)代码>您可以将代码更新为以下内容
let arr=[{name:“Ramesh”,salservision:10,MarketingCode:11},
{名称:“Suresh”,销售代码:12,销售代码:14},
{名称:“湿婆”,销售代码:12,销售代码:14},
{名称:“Sakthi”,销售代码:10,销售代码:11},
{名称:“OP”,销售代码:10,销售代码:11}]
//您需要编写自定义排序函数
var sorted_arr=arr.slice().sort((a,b)=>{
如果(a.salservision==b.salservision){
返回a.MarketingCode-b.MarketingCode;
}
返回a.salservision-b.salservision;
});
var结果=[];
对于(变量i=0;i=1&&sorted\u arr[i-1]。SalesVersion==sorted\u arr[i]。SalesVersion&&sorted\u arr[i-1]。MarketingCode==sorted\u arr[i]。MarketingCode){
结果:推送(排序的_arr[i+1]);
}否则{
结果.推送(排序的_-arr[i],排序的_-arr[i+1]);
}
}
}
控制台日志(结果)代码>看起来您正在尝试查找数组中至少存在一个具有类似属性的其他元素的元素。您可以使用.filter
进行此操作,然后使用排序
:
const dupesFromArr=array=>{
const filteredar=array.filter({name,salservision,MarketingCode},i,arr)=>(
arr.find((项目,findI)=>(
芬迪!==i&&
salservision==项。salservision&&
MarketingCode==项目。MarketingCode
))
));
返回filterDarr.sort((a,b)=>
String(a.salservision).localeCompare(String(b.salservision),'kn')||
字符串(a.MarketingCode).localeCompare(字符串(b.MarketingCode),'kn')
);
};
log(dupesFromArr([{name:“Ramesh”,salservision:10,MarketingCode:11},{name:“Suresh”,salservision:12,MarketingCode:13},{name:“Siva”,salservision:10,MarketingCode:14},{name:“Sakthi”,salservision:10,MarketingCode:11}]))
log(dupesFromArr([{name:“Ramesh”,salservision:10,MarketingCode:11},{name:“Suresh”,salservision:12,MarketingCode:14},{name:“Siva”,salservision:12,MarketingCode:14},{name:“Sakthi”,salservision:10,MarketingCode:11}])
您可以使用reduce
第一个reduce
将使用salservision
和MarketingCode
的串联值对值进行分组
第二个reduce
将检查组中是否有多个元素。如果存在concat
,则将值放入1个数组中
let数组=[{name:“Ramesh”,salservision:10,MarketingCode:11},{name:“Suresh”,salservision:12,MarketingCode:14},{name:“Siva”,salservision:12,MarketingCode:14},{name:“Sakthi”,salservision:10,MarketingCode:11}];
让result=Object.values(array.reduce)(c,v)=>{
设k=v.salservision+'-'+v.MarketingCode;
c[k]=c[k]| |[];
c[k].推力(v);
返回c;
}减少((c,v)=>v.length>1?c.concat(v):c,[]);
控制台日志(结果)代码>基本上cou可以保持排序,但对于想要的键,这将返回一种分组数组,其中所有想要的键及其值都在直接邻域中
然后,您可以通过使用实际值和前置或后继项检查所有键来过滤数组
var数组=[{name:“Ramesh”,salservision:10,MarketingCode:11},{name:“Suresh”,salservision:12,MarketingCode:13},{name:“Siva”,salservision:10,MarketingCode:14},{name:“Sakthi”,salservision:10,MarketingCode:11}],
密钥=['salservision','MarketingCode'],
结果=数组
.排序((a,b)=>{
变量d;
一些(k=>d=a[k]-b[k]);
返回d;
})
.filter((o,i,a)=>
keys.every(k=>a[i-1]&&a[i-1][k]==o[k])||
keys.every(k=>a[i+1]&&o[k]==a[i+1][k])
);
控制台日志(结果)代码>
作为控制台包装{max height:100%!important;top:0;}
我在filteredar.sort((a,b)=>b.SalesVersion-a.SalesVersion | b.MarketingCode-a.MarketingCode)中收到一个错误
赋值的左侧必须是变量any int或enum,因为SalesVersion
属性类型是string。是的,我已正确复制了它。但是typescript不允许您的编辑器告诉您MarketingCode属性是字符串,但是您发布的代码显示它们是整数。这里有些东西不符合要求。@RameshRajendran,您可以使用+
运算符强制生成结果。类似这样的内容:返回filterDarr.sort((a,b)=>+a.salservision-(+b.salservision)|+a.MarketingCode-(+b.MarketingCode))
@Mihai如果MarketingCode
是一个string
,那么+Marketing
将是NaN
。