通过检查两个元素从数组中获取重复值

Ram*_*ran 4 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: 10, MarketingCode: 11 },...]
Run Code Online (Sandbox Code Playgroud)

然后我期待以下结果

[{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
 { name: "Sakthi", SalseVersion: 10, MarketingCode: 11 }]
Run Code Online (Sandbox Code Playgroud)

如果我的数组有以下数据

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 },...]
Run Code Online (Sandbox Code Playgroud)

然后我期待以下结果.

        [{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
        { name: "Sakthi", SalseVersion: 10, MarketingCode: 11 }
        { name: "Suresh", SalseVersion: 12, MarketingCode: 14},
        { name: "Siva", SalseVersion: 12, MarketingCode: 14 }]
Run Code Online (Sandbox Code Playgroud)

我试过这种方式:在数组中获取所有非唯一值(即:重复/多次出现)

let arr = [{ name: "Ramesh", SalseVersion: 10, MarketingCode: 11 },
        { name: "Suresh", SalseVersion: 12, MarketingCode: 13 },
        { name: "Siva", SalseVersion: 10, MarketingCode: 14 },
        { name: "Sakthi", SalseVersion: 10, MarketingCode: 11 }]


var sorted_arr = arr.slice().sort();
var results = [];
for (var i = 0; i < sorted_arr.length - 1; i++) {
    if (sorted_arr[i + 1].SalesVersion == sorted_arr[i].SalesVersion && sorted_arr[i + 1].MarketingCode == sorted_arr[i].MarketingCode) {
        results.push(sorted_arr[i]);
    }
}

console.log(results);
Run Code Online (Sandbox Code Playgroud)

但无法获得重复的值.你能解决这个问题吗?

注意:请注意,如果SalseVersionMarketingCode值是,它应该也可以工作string/number/Boolean.

因为我已经尝试了以下一些答案,我得到以下错误.

在此输入图像描述

Edd*_*die 5

您可以使用 reduce

第一reduce意愿组使用的连接值的值SalseVersionMarketingCode.

第二个reduce将检查该组是否有多于1个元素.如果有concat值为1个数组.

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 }];

let result = Object.values(array.reduce((c, v) => {
  let k = v.SalseVersion + '-' + v.MarketingCode;
  c[k] = c[k] || [];
  c[k].push(v);
  return c;
}, {})).reduce((c, v) => v.length > 1 ? c.concat(v) : c, []);

console.log( result );
Run Code Online (Sandbox Code Playgroud)