首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环对象以获取唯一名称会导致奇怪的行为

循环对象以获取唯一名称会导致奇怪的行为
EN

Stack Overflow用户
提问于 2018-03-25 16:37:00
回答 1查看 30关注 0票数 0

我正在尝试从users的示例对象中输出唯一的语言名称:

代码语言:javascript
复制
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'],
  }
];

通过这样做,我成功地输出了唯一的语言名称:

代码语言:javascript
复制
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
复制
[JavaScript: 0]
C#
:
0
C++
:
0
JavaScript
:
0
PHP
:
0
Swift
:
0

我真的不明白,它不是应该一个接一个地输出,也就是说,按每个[l[i]]输出,而不是所有的都直接输出…实际上,我现在不明白如何才能在final中输出正确的结果。

如果能帮助我们理解这一点将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-03-25 16:51:12

您可以使用一个对象作为哈希表来收集语言,并在检查此属性是否存在以及它是否为数组之后,为单个用户的语言使用另一个forEach

在回调函数中,使用language将true赋给属性,最后获取哈希表的键并返回所有语言。

代码语言:javascript
复制
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());

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49473956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档