废话不多说直接上代码:
//新建一个数组
let SpecsName = [{goodsName:'商品1',quantity:1},{goodsName:'商品2',quantity:2},{goodsName:'商品',quantity:1},{goodsName:'商品',quantity:1},{goodsName:'商品3',quantity:1},{goodsName:'商品1',quantity:12},];
var obj = {}; // 重复项组成的对象
SpecsName.forEach((item, index) => {
SpecsName.forEach((item1, index1) => {
// 每一项要后面的每一项进行对比
if (index1 > index && item.goodsName == item1.goodsName) {
if (!obj[item.goodsName]) {
// 设置初始数组 goodsName是要筛选的值
obj[item.goodsName] = [];
obj[item.goodsName].push(index);
obj[item.goodsName].push(index1);
}else {
obj[item.goodsName].push(index);
obj[item.goodsName].push(index1);
}
}
});
});
Object.keys(obj).forEach((item, index) => {
obj[item] = [...new Set(obj[item])]; //去掉重复下标,有重复下标是因为push了index和index1
if (obj[item].length > 1) {
console.log('有重复项:', item, '下标为:', obj[item], '重复数量为:', obj[item].length);
}
});
Object.keys(obj)方法获取的是对象的key
例:
// 1. 定义一个对象 var obj = { 0:'孙悟空',1:'猪八戒',2:'唐僧'.3:'沙和尚' }
// 2. 使用Object.keys()方法 var keyValue = Object.keys(obj)
// 3. 打印结果 console.log(keyValue) // 得到是:["0","1","2","3"]
set并集(去掉重复)
例:
let a = new Set([1, 2, 3, 2, 12, 10]);
// 并集 let union = new Set([...a]);
//console.log(union) Set {1, 2, 3, 12, 10}
set交集
例:
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
(a 相对于 b 的)差集
例:
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
该代码段展示了一种JavaScript方法,通过遍历数组并使用对象来检测及处理重复的商品名。它首先创建了一个包含商品名和数量的对象,然后通过两层循环比较数组中的元素,将重复的商品名及其索引存储在另一个对象中。最后,使用Set去重并打印出存在重复的商品及其索引和数量。
1828





