我有两个 2D 数组,我想数一数



我想在arr1的二维数组中计算arr2的数值。

arr1 的索引从 1 开始。

如果 arr2 中 [0] 的数组是 3 5 7 我想获取 arr1[0] 的索引 3 = 1 索引 5 = 5 索引 7 = 1 的值。

这很难解释,但请理解和帮助。

let arr1 = [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]
]
let arr2 = [
['3', '1', '4'],
['2', '2', '6'],
]
let result = [
[0, 1, 1, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 1, 0, 0]
]

注意

自从我第一次开始回答它以来,原始问题已经过编辑。示例问题数据不再有意义 - 我的答案解决了我解释的原始问题和示例数据/结果,因为否则我不知道您的预期结果是什么,您需要进一步编辑您的问题以使其有意义。

问题中的原始示例数据:

let arr1 = [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]
]
let arr2 = [
['3', '1', '4'],
['2', '2', '6'],
['8', '4', '2']
]
let result = [
[1, 0, 1, 1, 0],
[0, 2, 0, 0, 0, 0, 1],
[0, 1, 0, 1, 0, 0, 0, 0, 1]
]

前言

这个问题似乎很可疑,就像您在家庭作业问题上寻求帮助一样。我将首先给出一个更笼统的答案,以尝试为您指出自己解决问题的正确方向。如果你还需要更具体的帮助,我也会发布一个隐藏的详细答案。仅当一般答案不能让您自己解决时,请仅参考详细答案。

一般

对于这样的问题,将其分解为更小、更容易解决的部分,然后将这些部分组合成一些更大的解决方案通常是有帮助的。

例如,考虑一个更简单的问题,即在arr1中查看一对数组,并单独查看arr2数组:

let subArr1 = [0, 0, 0, 0, 0];
let subArr2 = ['3', '1', '4'];

在这里,用简单的英语很清楚你想要做什么:"迭代"subArr2的每个索引,并根据该值修改某个subArr1索引的当前值。迭代很容易 - 这样做的最基本结构是经典的for循环:

// Note that we're iterating over the second array here.
// This is important because that is the array that
//   is the "source" of the updates to the other array.
for (let i = 0; i < subArr2.length; i++) {
// do something to subArr1...?
}

do something to subArr1的意思是读者的练习(并在隐藏的详细答案中概述),但不是很复杂;不要过度思考这部分!

一旦你弄清楚了如何解决这个子数组逻辑,将其封装到某种函数中会很有帮助,也许是这样的:

function processSubarrays(inputArr1, inputArr2) {
for (let i = 0; i < inputArr2.length; i++) {
// do something to inputArr1...?
}
}

然后,您可以轻松地调用此函数来处理和更新一些基于inputArr2的数组inputArr1。使用您最初的arr1arr2示例,一个"朴素"的解决方案是只为每对子数组调用我们的processSubarray()函数:

processSubarrays(arr1[0], arr2[0]);
processSubarrays(arr1[1], arr2[1]);
processSubarrays(arr1[2], arr2[2]);

但这很冗长,不是很动态,有一种方法可以做得更好。再次,使用我们经典的迭代for循环!

// Note again, that we are iterating over the second array
for (let i = 0; i < arr2.length; i++) {
// do something with processSubarrays()...?
}

同样,你在这个for循环中究竟做了什么,对读者来说是一个练习。但再一次,它非常简单 - 不要想太多!

秘密隐藏详细答案

请仅在您尝试使用上述解释解决它并且没有成功时才透露这一点。

<块引用类>

>


function processSubarrays(subArr1, subArr2) {
for (let i = 0; i < subArr2.length; i++) {
// Determine which index of arr1 we need to modify
const indexToIncrement = subArr2[i] - 1;
// Add 1 to that index in arr1
subArr1[indexToIncrement] = subArr1[indexToIncrement] + 1;
}
}
for (let i = 0; i < arr2.length; i++) {
// Here we just process each subarray in order
processSubarrays(arr1[i], arr2[i]);
}

以此作为初始值:

let arr1 = [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]
]
let arr2 = [
['3', '1', '4'],
['2', '2', '6'],
['8', '4', '2']
]

在此之后arr1的最终值将根据需要为:

[
[1, 0, 1, 1, 0],
[0, 2, 0, 0, 0, 1, 0],
[0, 1, 0, 1, 0, 0, 0, 1, 0],
]

最新更新