我正在尝试从users的示例对象中输出唯一的语言名称:
var users = [
{
username: 'Alex',
favoriteLanguages: ['JavaScript', 'JavaScript', 'C++'],
},
{
username: 'Bob',
favoriteLanguages: ['JavaScript', 'JavaScript', 'PHP'],
},
{
username: 'Mia',
favoriteLanguages: ['JavaScript', 'JavaScript', 'JavaScript', 'JavaScript'],
},
{
username: 'David',
favoriteLanguages: ['C#', 'C++', 'JavaScript'],
},
{
username: 'Lee',
favoriteLanguages: ['JavaScript', 'JavaScript', 'Swift'],
}
];通过这样做,我成功地输出了唯一的语言名称:
var users = [
{
username: 'Alex',
favoriteLanguages: ['JavaScript', 'JavaScript', 'C++'],
},
{
username: 'Bob',
favoriteLanguages: ['JavaScript', 'JavaScript', 'PHP'],
},
{
username: 'Mia',
favoriteLanguages: ['JavaScript', 'JavaScript', 'JavaScript', 'JavaScript'],
},
{
username: 'David',
favoriteLanguages: ['C#', 'C++', 'JavaScript'],
},
{
username: 'Lee',
favoriteLanguages: ['JavaScript', 'JavaScript', 'Swift'],
}
];
function allLanguages() {
var temp = {} // changed
var final = []
users.forEach(function(val){
for(var i in val["favoriteLanguages"]){
var l = val["favoriteLanguages"]
if(typeof(temp[l[i]]) == "undefined"){
final.push(l[i])
}
temp[l[i]] = 0
console.log(temp)
}
})
//console.log("temp: " + temp)
//console.log("final: " + final)
}
allLanguages();
然而,我不太明白为什么我从迭代0中立即得到了temp中语言的完整对象……它将从以下位置开始输出到控制台:
[JavaScript: 0]
C#
:
0
C++
:
0
JavaScript
:
0
PHP
:
0
Swift
:
0我真的不明白,它不是应该一个接一个地输出,也就是说,按每个[l[i]]输出,而不是所有的都直接输出…实际上,我现在不明白如何才能在final中输出正确的结果。
如果能帮助我们理解这一点将不胜感激。
发布于 2018-03-25 16:51:12
您可以使用一个对象作为哈希表来收集语言,并在检查此属性是否存在以及它是否为数组之后,为单个用户的语言使用另一个forEach。
在回调函数中,使用language将true赋给属性,最后获取哈希表的键并返回所有语言。
function allLanguages() {
var final = {};
users.forEach(function (val) {
if (Array.isArray(val.favoriteLanguages)) {
val.favoriteLanguages.forEach(function (language) {
final[language] = true;
});
}
});
return Object.keys(final);
}
var users = [{ username: 'Alex', favoriteLanguages: ['JavaScript', 'JavaScript', 'C++'], }, { username: 'Bob', favoriteLanguages: ['JavaScript', 'JavaScript', 'PHP'], }, { username: 'Mia', favoriteLanguages: ['JavaScript', 'JavaScript', 'JavaScript', 'JavaScript'], }, { username: 'David', favoriteLanguages: ['C#', 'C++', 'JavaScript'], }, { username: 'Lee', favoriteLanguages: ['JavaScript', 'JavaScript', 'Swift'] }];
console.log(allLanguages());
https://stackoverflow.com/questions/49473956
复制相似问题