首页 > 解决方案 > 两个数组的最小值以创建一个新数组

问题描述

我一直在刷新我的 JavaScript 编程技能,并且遇到了一些有趣的行为。

我有两个数组,我想从两个数组的索引中的每一个创建一个仅包含最小非零值的新数组。例如:

    // input
    A = [1,3,5]
    B = [0,2,6]

    //expected
    C = [1,2,5]

    // for every index, the smallest value is chosen, as long as it is not a 0

我想用它array.map()来解决这个问题。这是我的输入:

    const array1 = [7,2,1,4,1,2,1,1,0];
    const array2 = [0,1,1,0,1,2,1,0,0];


    const result = array1.map(x => array2[array1.indexOf(x)] == 0? x:Math.min(x,array2[array1.indexOf(x)]));

    // expected 
    // [7, 1, 1, 4, 1, 2, 1, 1, 0]

    // Actual output
       [7, 1, 1, 4, 1, 1, 1, 1, 0]

如您所见, index 处的预期值5是 a 2,但我收到的是 a 1

我将非常感谢对后台可能发生的事情的见解。提前致谢 :)

标签: javascriptarraysdictionary

解决方案


您可以检查第二个数组中的值和相应的值,并获取该值或非常大的值的最小值。

const
    array1 = [7, 2, 1, 4, 1, 2, 1, 1, 0],
    array2 = [0, 1, 1, 0, 1, 2, 1, 0, 0],
    result = array1.map((v, i) => 
        (v || array2[i]) &&
        Math.min(v || Number.MAX_VALUE, array2[i] || Number.MAX_VALUE)
    );

console.log(...result);

通过查看零值的更简洁的方法

const
    getMin = (a, b) => a === 0 && b || b === 0 && a || Math.min(a, b),
    array1 = [7, 2, 1, 4, 1, 2, 1, 1, 0],
    array2 = [0, 1, 1, 0, 1, 2, 1, 0, 0],
    result = array1.map((v, i) => getMin(v, array2[i]));

console.log(...result);


推荐阅读