Javascript从一个基于其他数组的数组中获取信息。 (也许合并也可以工作)
问题描述:
开发者,黑客和观察家:)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>
答
的变量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>
答
使用对象文本,并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
这些参数是从精简函数发送的值,以及它们代表的accumulator
,currentValue
和currentIndex
..上减少更多详细的活动 - >https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=a
a[c] =
,这就是我们正在设置对象文本,c
要么等于blue
或red
,是因为我们是一个对象字面它可能没有存在的内部存储,将扩大到a["red"] =
或a["blue"] =
a[c] || 0
,所以这只是将该值设置为0。 。
最后,我们只需使用i
即数组的索引值来添加当前得分,即可获得得分。 score[i]
..
的&& a
位在结束 - > 当使用减少您正常返回的accumulator
,所以(formula) && a
意味着它总是返回a
。这只是一个简写,所以你不必使用另一行return a
。
你的问题到底是什么? – jmargolisvt
的for循环是没有用的,你可以删除它们 – marvel308
'也许合并它们?它有帮助吗?也许!!!!,。你应该知道你想要什么比我们更多。输出示例不会受到影响。 – Keith