我正在使用此代码使用键“category”读取每个对象的所有值:
const listChapter = datas.map((data) => console.log(data.category))
datas是一个Objects数组,有45个对象。
问题是,当我在console.log中,我有许多重复值时,你可以在下面看到:
我希望每个类别都有一个唯一值。我怎样才能做到这一点?
答案 0 :(得分:1)
在迭代之前从数据中过滤重复项。
var unique = datas.reduce(function(unique, data) {
return unique.indexOf(data.category) === -1 ? unique.concat(data.category) : unique;
}, []);
答案 1 :(得分:0)
这种方法更快,因为迭代次数更少:
const listChapter = Object.keys(datas.reduce((ac, el) => {
ac[el.category] = true
return ac
}, {}))
答案 2 :(得分:0)
arr是整个数组。
for(var i = 0; i < data.length; i++) {
if(arr[i] == data.category) {
remove item here;
}
}
答案 3 :(得分:0)
你也可以使用Set:
来解决这个问题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);
答案 4 :(得分:0)
这是使用filter()
的替代单线程(仅为了好玩):
console.log(datas.filter((data, i, a) =>
i === a.findIndex(data2 => data.category === data2.category)));
答案 5 :(得分:0)
这是Tomek's答案的微小改进。 (我暂时无法发表评论。)
const arr = [
{'category': 'Alfa'},
{'category': 'Alfa'},
{'category': 'Beta'}
];
const unique = [...new Set(arr.map(item => item.category))];