Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过使用两个元素进行检查,从数组中获取重复的值_Javascript_Arrays_Typescript_Ecmascript 6 - Fatal编程技术网

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