【问题标题】:Javascript get information from one array based on other array. (maybe merge could also work)Javascript 根据另一个数组从一个数组中获取信息。 (也许合并也可以)
【发布时间】:2017-09-23 21:48:18
【问题描述】:

开发者、黑客和观察者 :)

我有一个问题,我无法理解需要根据第一个数组从一个数组中提取数据的部分。

也许合并它们?有帮助吗

所以我有两个数组:

var teams = ["red", "red", "red", "red", "blue", "blue"];
var scores = [4, 45, 21, 34, 76, 56];

var scoreRed = [];
var scoreBlue = [];

var i;
var scoreBlueIndex;
for (i = 0; i < teams.length; i++){
  scoreBlueIndex = teams.indexOf("blue");
  scoreBlue = scores[scoreBlueIndex];
}

var ii;
var scoreRedIndex;
for (ii = 0; ii < teams.length; ii++){
  scoreRedIndex = teams.indexOf("red");
  scoreRed = scores[scoreRedIndex];
}


console.log(scoreRed);
console.log(scoreBlue);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"&gt;&lt;/script&gt;

【问题讨论】:

  • 你的问题到底是什么?
  • for循环没用,可以去掉
  • Maybe merge them ? does it help 也许!!!!,。你应该比我们更清楚你想要什么。一个示例输出,不会有什么坏处。
  • 我不需要他们循环每支球队并得分吗?
  • @jmargolisvt 问题是我如何计算每支球队的分数。

标签: javascript arrays merge


【解决方案1】:

使用对象字面量和 Array.reduce,您可以执行类似 ->

的操作

var teams = ["red", "red", "red", "red", "blue", "blue"];
var scores = [4, 45, 21, 34, 76, 56];

var results = teams.reduce((a,c,i) => {
  return (a[c] = (a[c] || 0) + scores[i]) && a;
}, {});

console.log(`Red: ${results.red}`);
console.log(`Blue: ${results.blue}`);

return (a[c] = (a[c] || 0) + scores[i]) &amp;&amp; a;

上面的代码可能看起来有点神秘,但是一旦你习惯了它们就不难了。首先,发送到a,c,i 的参数是reduce 函数发送的值,它们分别代表accumulatorcurrentValuecurrentIndex.. 更多关于reduce 的细节在这里-> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=a

a[c] =,这是我们设置对象字面量的地方,c 将等于 bluered,因此它将扩展为 a["red"] =a["blue"] =

a[c] || 0 因为我们存储在一个可能还不存在的对象字面量中,所以这只是将值设置为 0..

最后,我们只需使用数组的索引值i 加上当前分数,即可得到分数。 score[i]..

末尾的 &amp;&amp; a 位 -> 使用 reduce 时,您通常会返回 accumulator,因此 (formula) &amp;&amp; a 意味着它将始终返回 a。这只是一个简写,因此您不必使用另一行 return a

【讨论】:

  • 是的,我可以用它来对数组中的所有值求和,但我有点不明白你的例子,返回部分是否有助于按团队排序?
  • 它不是一个数组,而是一个对象文字来对红色和蓝色进行分组。返回位我会更新答案,说明这一切的意义。
  • 感谢您的解释!说实话还不清楚,但我会四处挖掘并学习。
【解决方案2】:

变量是 scoreRed 和 scoreBlue 是标量变量,但您已将它们声明为数组。请参阅以下工作 sn-p。

var teams = ["red", "red", "red", "red", "blue", "blue"];
var scores = [4, 45, 21, 34, 76, 56];

var scoreRed=0;
var scoreBlue=0;

var i;
var scoreBlueIndex;
for (i = 0; i < teams.length; i++){
  scoreBlueIndex = teams.indexOf("blue", i);
  if(scoreBlueIndex > -1) {
    scoreBlue = scoreBlue + scores[scoreBlueIndex];
    i=scoreBlueIndex;
   }
   else break;
}

var ii;
var scoreRedIndex;
for (ii = 0; ii < teams.length; ii++){
  scoreRedIndex = teams.indexOf("red", ii);
  if(scoreRedIndex > -1) {
     scoreRed = scoreRed + scores[scoreRedIndex];
     ii=scoreRedIndex;
  }
  else break;
}


console.log(scoreRed);
console.log(scoreBlue);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 我更新了我的代码,我试图在数组中获取所有团队对应的分数。 (我知道如何计算数组元素)但仍然很难破解这个
  • @Mer0 但是你有 4 个红色和 2 个蓝色。你想把蓝色和红色的分数相加吗?或者您想单独打印每一个 - 总共 7 个?
  • 是的,这是我的问题,我想将蓝色的分数相加并阅读每个团队。我正在编写双 for 循环但失败了,这就是我尝试使用两个 for 循环的原因。
  • @Mer0,啊,那部分在您的问题中并不清楚。现在既然你已经澄清了,请参阅我更新的答案。如果仍然不能解决您的问题,请告诉我
猜你喜欢
  • 2019-05-29
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多