如何对多个数组中给出的输入进行分组,这些数组看起来像[key1,“value1”,key2,“value2”,...]?

时间:2015-08-28 07:34:44

标签: javascript arrays algorithm

几天前我遇到了这个问题,令人惊讶的是它为我的逻辑思维造成了很多问题。

我们有三个简单的数组:

http

控制台日志中的输出结果如下:

Comments

现在我被告知可以用for循环来解决,但我不知道如何获取数字的位置然后保存这些数字,以便我可以从其他两个数组中选择它们。

它必须是动态的,所以如果我向数组添加更多元素,它会自动生成类似上面提到的三个句子。

这是我从老师那里得到的,所以输入数组必须保持这样。每个数字后面都有一个字符串按升序排列,这就是我们必须弄清楚的模式,所以看起来就像我上面评论过的那样。

5 个答案:

答案 0 :(得分:2)

您的问题是奇怪的数据结构。将其转换为可以使用的内容:



var countries = [1, "DK", 2, "USA", 3, "Sweden"];
var languages = [2, "English", 1, "Danish", 3, "Swedish"];
var population = [3, 8000000, 1, 6000000, 2, 3000000000];

var data = {};

function addArray(key, ary) {
  
  for (var i = 0; i < ary.length; i += 2) {
    var j = ary[i];
    data[j] = data[j] || {};
    data[j][key] = ary[i + 1]; 
  }
}

addArray('country', countries);
addArray('language', languages);
addArray('population', population);

document.write("<pre>" + JSON.stringify(data,0,3));
  
&#13;
&#13;
&#13;

如何从此对象获取输出应该是显而易见的。

答案 1 :(得分:1)

虽然IE8及以下版本不支持Array.indexOf,但您可以尝试:

var countries = [1, "DK", 2, "USA", 3, "Sweden"];
var languages = [2, "English", 1, "Danish", 3, "Swedish"];
var population = [3, 8000000, 1, 6000000, 2, 3000000000];

var size = countries.length / 2;

for (var i = 1; i <= size; i++)
{
    var country = countries[countries.indexOf(i) + 1];
    var lang = languages[languages.indexOf(i) + 1];
    var pop = population[population.indexOf(i) + 1];

    console.log("In " + country + " people speak  " + lang + "  and there live  " + pop + "  people");
}

答案 2 :(得分:0)

你肯定需要使用多个for循环。

除非您想要更改数据的结构(请参阅georg的回答),否则这样的事情应该有效:

for (var i = 0; i < countries.length; i+=2) {
  var countryId = countries[i];
  var countryName = countries[i+1];
  var countryLanguage, countryPopulation;
  for (var j = 0; j < languages.length; j+=2) {
    if (languages[j] == countryId) countryLanguage = languages[j+1];
  }
  for (var j = 0; j < population.length; j+=2) {
    if (population[j] == countryId) countryPopulation = population[j+1];
  }
  console.log("In " + countryName + " people speak " +
              countryLanguage + " and there live " +
              countryPopulation + " people");
}

答案 3 :(得分:-1)

使用2D数组更改逻辑,如

var array = [["DK","English","8000000"],["USA","Danish","6000000"],["Sweden","Swedish","2000000"]];

由此您可以轻松找到您的价值。

答案 4 :(得分:-1)

console.log("In USA people speak " + languages[(languages.indexOf(countries[countries.indexOf("USA")-1])
+ 1)] + " and there live " + 
population[(population.indexOf(countries[countries.indexOf("USA")-1])+ 1)] + " people");

注意:这是一个不先操作数据的解决方案! 这适用于第一个,其他的将是相同的。不确定是否有更好的方法,但这是我的第一直觉......