总结 2 个数组中的每个值
sum up each individual values from 2 arrays
我试图理解这个条件循环来总结 2 个数组中的每个元素,但我偶然发现了后一部分,我不明白那里要实现什么。
你能给我解释一下吗?
function Arrays_sum(array1, array2) {
var result = [];
var ctr = 0;
var x = 0;
if (array1.length === 0)
return "array1 is empty";
if (array2.length === 0)
return "array2 is empty";
while (ctr < array1.length && ctr < array2.length) {
result.push(array1[ctr] + array2[ctr]);
ctr++;
}
if (ctr === array1.length) //I don't understand from here onwards
{
for (x = ctr; x < array2.length; x++) {
result.push(array2[x]);
}
} else {
for (x = ctr; x < array1.length; i++) {
result.push(array1[x]);
}
}
return result;
}
让我们假设以下两个数组及其 "sum":
Array 1: 1 2 3 4 5 6 7 8 9 [length = 9]
Array 2: 2 4 6 8 2 4 6 [length = 7]
Sum : 3 6 9 12 7 10 13 8 9 [length = 9]
注意最后两项。总和等于第一个数组的值,因为第二个数组不包含这样数量的值。
Array 1: 1 2 3 4 5 6 7 8 9
Array 2: 2 4 6 8 2 4 6 ? ?
这正是算法的作用:
1) 虽然两个数组在 i
索引处都有数字 - 总结起来。
ctr : ! ! ! ! ! ! ! \|/ [ ctr = 7 (remember: 0-based indexes)]
Array 1: 1 2 3 4 5 6 7 8 9 [length = 9]
Array 2: 2 4 6 8 2 4 6 [length = 7]
Sum : 3 6 9 12 7 10 13
此处 while (ctr < array1.length && ctr < array2.length)
条件在 ctr < array2.length
中断。
此外,检查 ctr == array2.length
returns true 意味着 Array 2 结束了,我们需要继续遍历 array1
.
for (x = ctr; x < array1.length; i++) {
result.push(array1[x]);
}
2) 当剩余数组未结束时 - 从中添加值。
x : ! ! \|/ [ x = 10]
Array 1: 1 2 3 4 5 6 7 8 9 [length = 9 ]
Array 2: 2 4 6 8 2 4 6 [length = 7 ]
Sum : 3 6 9 12 7 10 13 8 9
在第一个循环结束时,以下断言成立:
ctr === array1.length || ctr === array2.length
观察以下场景说明:
array1: xxxxxxx (length = 7)
array2: xxxxxxxxxx (length = 10)
^
7 (ctr)
如果到达一个数组的末尾,它将继续从该点开始追加另一个数组的每个元素。当然,这假设每个数组边界之外的元素被认为是 0
.
从技术上讲,该函数可以通过考虑以下因素来减少边缘情况:
array2 is empty => yield array1
array1 is empty => yield array2
也就是说,因为我们正在处理 JavaScript 我们可以稍微改变 CS 规则:
function array_sum(a, b)
{
// iterate over the biggest array and map each value
return (a.length > b.length ? a : b).map(function(value, index) {
// to the sum of both, whereby 0 is assumed for non-existent elements
return value + (b[index] || 0);
});
}
如您所见,您正在使用 if,因为在 while 循环中您正在使用 && 条件检查两个数组。
所以如果假设 array1.length = 1 和 array2.length = 2 和你的 ctr = 1 那么你的 while loop 将是 stop ,但是 array2 还剩下一个值,所以对于剩余值,他们使用 IF条件
if (ctr === array1.length) //I don't understand from here onwards
{
for (x = ctr; x < array2.length; x++) {
result.push(array2[x]);
}
} else {
for (x = ctr; x < array1.length; i++) {
result.push(array1[x]);
}
}
我试图理解这个条件循环来总结 2 个数组中的每个元素,但我偶然发现了后一部分,我不明白那里要实现什么。
你能给我解释一下吗?
function Arrays_sum(array1, array2) {
var result = [];
var ctr = 0;
var x = 0;
if (array1.length === 0)
return "array1 is empty";
if (array2.length === 0)
return "array2 is empty";
while (ctr < array1.length && ctr < array2.length) {
result.push(array1[ctr] + array2[ctr]);
ctr++;
}
if (ctr === array1.length) //I don't understand from here onwards
{
for (x = ctr; x < array2.length; x++) {
result.push(array2[x]);
}
} else {
for (x = ctr; x < array1.length; i++) {
result.push(array1[x]);
}
}
return result;
}
让我们假设以下两个数组及其 "sum":
Array 1: 1 2 3 4 5 6 7 8 9 [length = 9]
Array 2: 2 4 6 8 2 4 6 [length = 7]
Sum : 3 6 9 12 7 10 13 8 9 [length = 9]
注意最后两项。总和等于第一个数组的值,因为第二个数组不包含这样数量的值。
Array 1: 1 2 3 4 5 6 7 8 9
Array 2: 2 4 6 8 2 4 6 ? ?
这正是算法的作用:
1) 虽然两个数组在 i
索引处都有数字 - 总结起来。
ctr : ! ! ! ! ! ! ! \|/ [ ctr = 7 (remember: 0-based indexes)]
Array 1: 1 2 3 4 5 6 7 8 9 [length = 9]
Array 2: 2 4 6 8 2 4 6 [length = 7]
Sum : 3 6 9 12 7 10 13
此处 while (ctr < array1.length && ctr < array2.length)
条件在 ctr < array2.length
中断。
此外,检查 ctr == array2.length
returns true 意味着 Array 2 结束了,我们需要继续遍历 array1
.
for (x = ctr; x < array1.length; i++) {
result.push(array1[x]);
}
2) 当剩余数组未结束时 - 从中添加值。
x : ! ! \|/ [ x = 10]
Array 1: 1 2 3 4 5 6 7 8 9 [length = 9 ]
Array 2: 2 4 6 8 2 4 6 [length = 7 ]
Sum : 3 6 9 12 7 10 13 8 9
在第一个循环结束时,以下断言成立:
ctr === array1.length || ctr === array2.length
观察以下场景说明:
array1: xxxxxxx (length = 7)
array2: xxxxxxxxxx (length = 10)
^
7 (ctr)
如果到达一个数组的末尾,它将继续从该点开始追加另一个数组的每个元素。当然,这假设每个数组边界之外的元素被认为是 0
.
从技术上讲,该函数可以通过考虑以下因素来减少边缘情况:
array2 is empty => yield array1
array1 is empty => yield array2
也就是说,因为我们正在处理 JavaScript 我们可以稍微改变 CS 规则:
function array_sum(a, b)
{
// iterate over the biggest array and map each value
return (a.length > b.length ? a : b).map(function(value, index) {
// to the sum of both, whereby 0 is assumed for non-existent elements
return value + (b[index] || 0);
});
}
如您所见,您正在使用 if,因为在 while 循环中您正在使用 && 条件检查两个数组。
所以如果假设 array1.length = 1 和 array2.length = 2 和你的 ctr = 1 那么你的 while loop 将是 stop ,但是 array2 还剩下一个值,所以对于剩余值,他们使用 IF条件
if (ctr === array1.length) //I don't understand from here onwards
{
for (x = ctr; x < array2.length; x++) {
result.push(array2[x]);
}
} else {
for (x = ctr; x < array1.length; i++) {
result.push(array1[x]);
}
}