Javascript 如何停止循环中的重复值?
我正在使用此代码读取每个对象中键为“category”的所有值:Javascript 如何停止循环中的重复值?,javascript,arrays,loops,Javascript,Arrays,Loops,我正在使用此代码读取每个对象中键为“category”的所有值: const list chapter=datas.map((数据)=>console.log(数据.category)) 数据是一个对象数组,共有45个对象 问题是,当我使用console.log时,我有许多重复的值,您可以看到以下内容: 我希望每个类别都有一个唯一的值。我该怎么做 在遍历数据之前,从数据中筛选重复项 var unique = datas.reduce(function(unique, data) { ret
const list chapter=datas.map((数据)=>console.log(数据.category))
数据是一个对象数组,共有45个对象
问题是,当我使用console.log时,我有许多重复的值,您可以看到以下内容:
我希望每个类别都有一个唯一的值。我该怎么做 在遍历数据之前,从数据中筛选重复项
var unique = datas.reduce(function(unique, data) {
return unique.indexOf(data.category) === -1 ? unique.concat(data.category) : unique;
}, []);
这种方法更快,因为迭代次数更少:
const listChapter = Object.keys(datas.reduce((ac, el) => {
ac[el.category] = true
return ac
}, {}))
arr是整个数组
for(var i = 0; i < data.length; i++) {
if(arr[i] == data.category) {
remove item here;
}
}
for(变量i=0;i
您还可以使用该套件完成以下操作:
let data = ['Alfa', 'Alfa', 'Beta', 'Gamma', 'Beta', 'Omega', 'Psi', 'Beta', 'Omega'];
let arr = [... new Set(data)];
// Or = Array.from(new Set(data));
console.log(arr);
编辑:我忘了你有一个对象数组。在这种情况下:
let data2 = [
{'category': 'Alfa'},
{'category': 'Alfa'},
{'category': 'Beta'}
]
let set = new Set();
data2.forEach((data) => {
set.add(data.category);
});
let arr2 = [... set];
console.log(arr2);
这里有一个使用
filter()
的替代单行程序(只是为了好玩):
这是答案的微小改进。(我还不能发表评论。)
数组中是否有大量重复值?如果是这样的话,您可能想先过滤掉重复的内容……如果您想要一个字符串数组,那么
listChapter
的格式应该是什么?您可以映射
数据,将每个类别放入一个数组,然后过滤该数组并删除任何重复的值。lodash或下划线具有生成唯一元素(q.uniq)的函数。它完成了这项工作。谢谢
console.log(datas.filter((data, i, a) =>
i === a.findIndex(data2 => data.category === data2.category)));
const arr = [
{'category': 'Alfa'},
{'category': 'Alfa'},
{'category': 'Beta'}
];
const unique = [...new Set(arr.map(item => item.category))];