2017-09-23 62 views
-3

开发者,黑客和观察家:)Javascript从一个基于其他数组的数组中获取信息。 (也许合并也可以工作)

我有点儿问题,我不能让我的头周围,我需要根据第一阵列从一个阵列中提取数据的一部分。

也许合并它们?它帮助

所以,我有两个数组:

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);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

+0

你的问题到底是什么? – jmargolisvt

+0

的for循环是没有用的,你可以删除它们 – marvel308

+0

'也许合并它们?它有帮助吗?也许!!!!,。你应该知道你想要什么比我们更多。输出示例不会受到影响。 – Keith

回答

0

的变量scoreRed和scoreBlue是标量变量,但你已经宣布他们为数组。请参阅以下工作片段。

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);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

+0

我更新了我的代码,我试图让所有团队在数组中获得相应的分数。 (我知道如何计算数组元素)但仍然很难破解这个 – Mer0

+0

@ Mer0但是你有4个红色和2个蓝色。你想分别为蓝色和红色的分数?或者你想单独打印每一个 - 共7个? – VHS

+0

是的,这是我的问题,我想分别为蓝色和阅读团队分数。 我正在写循环但失败,这就是为什么我试着用两个循环。 – Mer0

0

使用对象文本,并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]) && a;

上面的代码可以看有点神秘,但ti并不难你习惯了他们。首先,发送到这个a,c,i这些参数是从精简函数发送的值,以及它们代表的accumulatorcurrentValuecurrentIndex ..上减少更多详细的活动 - >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] ..

&& a位在结束 - > 当使用减少您正常返回的accumulator,所以(formula) && a意味着它总是返回a。这只是一个简写,所以你不必使用另一行return a

+0

是的,我可以使用它来对数组中的所有值进行求和,但我有点不明白你的例子,返回部分是否有助于按团队排序? – Mer0

+0

而不是一个数组,它使用一个对象字面值来将红色和蓝色分组。我将更新的返回位置回答为什么这意味着什么。 – Keith

+0

谢谢你解释这个!仍然不清楚,但我会挖掘和学习。 – Mer0

相关问题