首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当有太多的数组时,如何将一个数组的值赋值给其他数组?

当有太多的数组时,如何将一个数组的值赋值给其他数组?
EN

Stack Overflow用户
提问于 2019-05-04 21:44:12
回答 2查看 67关注 0票数 1

我显然不知道如何在标题中解释自己。

我有一个包含来自调查的信息的数组,这个数组给了我人们说他们使用得更多的应用程序,以及它们是如何评估它们的。

从列表中可以选择以下应用程序:

  • 单词
  • Excel
  • 功率点
  • 访问
  • 功率Bi

您必须按以下方面对每个应用程序进行评级:

  • 可用性
  • 性能
  • 移动能力
  • 数据移动

这些功能可分为“1-穷人”、“2-平均”、“3-好”或"4-N/A“。

另外,每个人都是按自己的大陆划分的:美洲、亚洲、欧洲、非洲、大洋洲。

我的问题:

我需要按大陆把人分开。通过他们对每个应用程序的评估:

来自美国的人们在“可用性”方面将单词评为“穷人”。

来自美国广播公司()的人在“表现”(Performance)中被评为“穷人”()。

来自美国广播公司()的人在“移动能力”(Mobile)中被评为“贫穷”()。

来自美国广播公司()的人在“数据运动”中被评为“贫穷”Word

我需要对每个评估做一个精确的循环:差、平均、好和N/A。

也适用于每个应用程序: Word,Excel,Power,Access,Power。

还有欧洲大陆:美洲,亚洲,欧洲,非洲,大洋洲。

这就是我的数组的样子(只是一个人的例子):

代码语言:javascript
复制
var results = [
{
    "Author": "Person 1",
    "Word Usability": "3",
    "Word Performance": "2",
    "Word Mobile capability": "1",
    "Word Data movement": "4",
    "Excel Usability": "3",
    "Excel Performance": "2",
    "Excel Mobile capability": "1",
    "Excel Data movement": "4",
    "PowerPoint Usability": "3",
    "PowerPoint Performance": "2",
    "PowerPoint Mobile capability": "1",
    "PowerPoint Data movement": "4",
    "Access Usability": "3",
    "Access Performance": "2",
    "Access Mobile capability": "1",
    "Access Data movement": "4",
    "PowerBi Usability": "3",
    "PowerBi Performance": "2",
    "PowerBi Mobile capability": "1",
    "PowerBi Data movement": "4",
    "Continent": "America"
},
...
]

我所做的是创建各种数组,然后将它们循环起来,按区域将人分开,并通过他们如何根据前面标记的每个方面来评估每个应用程序:

代码语言:javascript
复制
<script>
//I created arrays for each continent
var america = [],
    europe = [],
    asia = [],
    africa = [],
    oceania = [];

//And also separate the count of each "evaluation" from each aspect to rate the app
var americaWord_Usability1 = 0,
    americaWord_Usability2 = 0,
    americaWord_Usability3 = 0,
    americaWord_Usability4 = 0;
var americaWord_Performance1 = 0,
    americaWord_Performance2 = 0,
    americaWord_Performance3 = 0,
    americaWord_Performance4 = 0;
...

//I make the loop
for(var i=0;i<results.length;i++) {
    var currentItem = results[i];

    //depending their continent, I send each people to their correspondent array
    if(currentItem.Continent == "America") {
        america.push(currentItem);
    }
    ...
}

//now I loop by region and send them depending their app and how they were evaluated in each aspect
for(var q=0;q<america.length;q++){
    var currentItem = america[q];

    if(currentItem["Word Usability"] == "1") {
        americaWord_Usability1++;
    } else if(currentItem["Word Usability"] == "2") {
        americaWord_Usability2++;
    } else if(currentItem["Word Usability"] == "3") {
        americaWord_Usability3++;
    } else {
        americaWord_Usability4++;
    }
    if(currentItem["Word Performance"] == "1") {
        americaWord_Performance1++;
    } else if(currentItem["Word Performance"] == "2") {
        americaWord_Performance2++;
    } else if(currentItem["Word Performance"] == "3") {
        americaWord_Performance3++;
    } else {
        americaWord_Performance4++;
    }
    ...
}
</script>

用这种方法,一切都变成了噩梦。这是大量的代码,因为我需要为每个大陆建立一个数组,并为每个应用程序的每个方面建立一个数组!

我的实际代码有点长,有更多的方面需要评分和更多的应用程序。所以我的代码变得非常长。

我在这里的问题是:是否有更好、更容易实现这一目标的方法?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-04 22:04:58

为了简化工作,只需动态创建数组:

代码语言:javascript
复制
var userData = [];

for(var i=0;i<results.length;i++) {
    var currentItem = results[i];

    // If the subarray doesn't exist yet, create it
    if (userData[currentItem.Continent] == null) userData[currentItem.Continent] = [];

    // Push the data into the corresponding array
    userData[currentItem.Continent].push(currentItem);
}

现在,您将拥有一个数组,该数组将所有用户按大陆分隔开来。您可以应用相同的逻辑来检查您的评级,因此,例如:

代码语言:javascript
复制
// List all the possible keywords for ratings here
var ratingKeywords = ["Word Usability", "Excel Usability"];

// Empty arra for ratings
var ratings = [];

// Go through the continents
for (var continentName in userData) {
    var continent = userData[continentName];
    // Array for continent ratings

    if (!ratings[continentName]) ratings[continentName] = []; 

    for (var u in continent) {
        var user = continent[u];
        for (var k in ratingKeywords) {
            var keyword = ratingKeywords[k];
            console.log(keyword);

            var rating = user[keyword];

            if (!ratings[continentName][keyword]) ratings[continentName][keyword] = [];
            if (!ratings[continentName][keyword][rating.toString()]) ratings[continentName][keyword][rating.toString()] = 0;
            ratings[continentName][keyword][rating.toString()]++;
        }
    }
}

这看起来有点笨重,但您不需要对任何东西进行硬编码。如果一个新的大陆出现(这很可能不会发生,因为海平面上升,请去素食或尽快减少你的肉类消费),这个代码应该仍然有效。

您将得到一个具有以下结构的数组,例如:ratings["Europe"]["Word Usability"][5]: 400

(请注意,你也许不应该使用循环,但是.是的)

票数 1
EN

Stack Overflow用户

发布于 2019-05-04 22:01:43

您可以使用javascript过滤器代替。如下所示

代码语言:javascript
复制
ex:
   filteredListwith1 = results.filter((item) => { 
         if(item.continent === 'America' && item['Word Usability'] === '1') {
              return item;
          });
    americaBox_Usability1 = filteredListwith1.length;

同样的事情,你也可以重复2和3。

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

https://stackoverflow.com/questions/55987037

复制
相关文章

相似问题

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