javascript - 两个数组的最小值以创建一个新数组
问题描述
我一直在刷新我的 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
。
我将非常感谢对后台可能发生的事情的见解。提前致谢 :)
解决方案
您可以检查第二个数组中的值和相应的值,并获取该值或非常大的值的最小值。
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);
推荐阅读
- powershell - Compress-7zip 每个对象
- asp.net-mvc - ASP.NET MVC 如何重新指向 ASP.NET 中的新表
- c# - 升级到 NET Core 3.1 后,Authorize 属性始终返回 401
- javascript - 如何在chart.js中删除分组条形图中条形之间的空格?
- html - 如何选择列表的某些元素,以便我可以在我的角度组件的 html 中显示它们?
- swift - 用 nil 初始化 CoreData 日期
- javascript - 图像不会显示在 javascript 幻灯片中 google SameSite 错误
- javascript - 如何在本机反应中从输入字段传递数据?
- python - (Python 3)用索引图像中的另一种颜色替换颜色
- javascript - 如果定义了数组的模式,猫鼬数组以错误的顺序保存或出现错误“转换为字符串失败的值”