【问题标题】:Element-Wise Filtering of Jagged Multidimensional Array with 1D array in JavascriptJavascript中具有一维数组的锯齿状多维数组的元素过滤
【发布时间】:2019-11-20 14:29:29
【问题描述】:

const Amaths = [
    [1, 2, 3, 5, 6, 7, 8],
    [4, 5, 6, 8],
    [12, 3, 4]
]
const checks = [2.5, 4.01, 5];
const picks = [];
for (let j = 0; j < Amaths.length; j++) {
    for (let k = 0; k < Amaths[j].length; k++) {
        if (Amaths[j][k] > checks[j]) {
            picks.push(Amaths[j][k]);
        }
    }
}

console.log("picks", picks)

我想在不展平输出数组的情况下过滤锯齿状多维数组元素;在本例中,“挑选”。

我曾尝试使用 for 循环,但输出“picks”已变平。另外,我使用过 mathjs 库函数,但是这个库中的元素算术运算似乎只适用于非锯齿状多维数组。

预期的结果应该是:

const picks =  [ [3, 5, 6, 7, 8], [5, 6, 8], [12] ]

console.log ("expected picks", picks)

【问题讨论】:

    标签: javascript for-loop multidimensional-array conditional-statements


    【解决方案1】:

    使用.map 转换为另一个二维数组,在每个子数组上调用.filter,同时与被迭代子数组索引处的checks 进行比较:

    const Amaths = [
        [1, 2, 3, 5, 6, 7, 8],
        [4, 5, 6, 8],
        [12, 3, 4]
    ]
    const checks = [2.5, 4.01, 5];
    
    const result = Amaths.map(
      (subarr, i) => subarr.filter(
        num => num >= checks[i]
      )
    );
    console.log(result);

    要修复您的原始代码,您必须在每次外部迭代时将一个新子数组推送到 picks

    const Amaths = [
        [1, 2, 3, 5, 6, 7, 8],
        [4, 5, 6, 8],
        [12, 3, 4]
    ]
    const checks = [2.5, 4.01, 5];
    const picks = [];
    for (let j = 0; j < Amaths.length; j++) {
        picks.push([]);
        for (let k = 0; k < Amaths[j].length; k++) {
            if (Amaths[j][k] > checks[j]) {
                picks[j].push(Amaths[j][k]);
            }
        }
    }
    
    console.log("picks", picks)

    (但数组方法在这里可能是更好的选择,它们更简洁易懂)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2015-10-18
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多