【问题标题】:Filtering and changing both arrays过滤和更改两个数组
【发布时间】:2020-06-29 11:38:23
【问题描述】:

我有两个数组,例如:

arr1 = [3,3,2,2,1,1];
arr2 = [
  [1,1,1,1],
  [1,1,1],
  [1,1],
  [1]
];

我从 arr1 中获取每个值并从 arr2 中转移值(如果可能的话)。

示例: arr1[0] = 3,arr2[0] = [1,1,1,1]。 我从 arr2 移出三个 1;然后移动 arr1[0] 值

结果应如下所示:

arr1 = [3,2,2,1,1];
arr2 = [
  [1],
  [1,1,1],
  [1,1],
  [1]
];

这段代码应该在循环中工作,以便在没有 arr1 值或没有 arr2 值时停止循环(贪婪算法的原型)。我尝试在这里使用 .forEach.filter 方法,但它不能正常工作。最好的方法是什么? 我有类似的东西:

arr1.forEach((arr1_value, arr1_index, arr1_arr) => {
  arr2.forEach((arr2_value, arr2_index, arr2_arr) => {
    if (arr2_value.length >= arr1_value) {
          
    }
  });
});

算法解释

arr1 = [3,3,2,2,1,1];
arr2 = [
  [1,1,1,1],
  [1,1,1],
  [1,1],
  [1]
];

第 1 步 从 arr2[0] 移出 3 (arr1[0]=3) 个值,然后移入 arr1[0]

结果

arr1 = [3,2,2,1,1];
arr2 = [
  [1],
  [1,1,1],
  [1,1],
  [1]
];

第 2 步 从 arr2[1] 移出 3 (arr1[0]=3) 个值,然后移入 arr1[0]

结果

arr1 = [2,2,1,1];
arr2 = [
  [1],
  [],
  [1,1],
  [1]
];

第 3 步 从 arr2[2] 移出 2 (arr1[0]=2) 个值,然后移入 arr1[0]

结果

arr1 = [2,1,1];
arr2 = [
  [1],
  [],
  [],
  [1]
];

第 4 步 从 arr2[3] 移出 1 (arr1[1]=1) 值,然后移除 arr1[1] 值

结果

arr1 = [2,1];
arr2 = [
  [1],
  [],
  [],
  []
];

第 5 步 从 arr2[0] 移出 1 (arr1[1]=1) 值,然后移除 arr1[1] 值

结果

arr1 = [2];
arr2 = [
  [],
  [],
  [],
  []
];

所以循环在这里停止,因为没有剩下的 arr2 值

【问题讨论】:

  • 为什么arr2[1] 仍然是[1,1,1],如果像arr2[0] 案例一样从中删除3 个数字?为什么arr1[1]3变成2
  • 请添加最终想要的结果。
  • 您希望第二个数组的结果为[[1],[],[],[1]]?

标签: javascript arrays


【解决方案1】:

您可以迭代外部array2 并检查长度是否更小,然后继续下一个数组。如果不拼接数组a,则将array1break的项拼接到内循环中。

let array1 = [3, 3, 2, 2, 1, 1],
    array2 = [[1, 1, 1, 1], [1, 1, 1], [1, 1], [1]],
    i = 0;
    
while (i < array1.length) {
    let count = array1[i];
    for (let a of array2) {
        if (a.length < count) continue;
        a.splice(0, count);
        array1.splice(i--, 1);
        break;
    }
    i++;
}

console.log(array1);
console.log(array2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 2015-08-04
    • 2016-06-11
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多