使用reduce查看数组的两个值在JavaScript中是否生成零
我的任务如下: 编写一个接受数字数组的方法。如果一对数字 在数组和为零时,返回这两个数字的位置。 如果没有一对数字和为零,则返回使用reduce查看数组的两个值在JavaScript中是否生成零,javascript,arrays,Javascript,Arrays,我的任务如下: 编写一个接受数字数组的方法。如果一对数字 在数组和为零时,返回这两个数字的位置。 如果没有一对数字和为零,则返回null 我认为您必须使用另外两个参数来获取初始数组值,如: var newarr = arr.reduce(function(arr, previous, current, i, a){ if ((a[i] + a[i + 1]) === 0) { 但那没用。。。 任何帮助都将不胜感激 这可以很容易地使用地图来完成。这种方法是在地图上迭代,我们存储每个
null
我认为您必须使用另外两个参数来获取初始数组值,如:
var newarr = arr.reduce(function(arr, previous, current, i, a){
if ((a[i] + a[i + 1]) === 0) {
但那没用。。。
任何帮助都将不胜感激 这可以很容易地使用地图来完成。这种方法是在地图上迭代,我们存储每个索引
i
和值v
map[-v] = i
然后我们检查是否定义了map[v]
,如果是,我们找到了一对。如果我们到达终点时没有找到一对,那么我们可以返回null
请注意,我们实际上首先在这里检查map[v]
,否则0
的单个值将作为它自己的对返回
var two_sum = function(arr) {
var map = {};
for (var i = 0; i < arr.length; i++) {
var val = arr[i];
if (map.hasOwnProperty(val)) {
return [i, map[val]];
}
map[-1 * val] = i;
}
return null;
};
var two_sum=函数(arr){
var-map={};
对于(变量i=0;i
上述代码未经测试,但我相信它会起作用。使用
reduce的解决方案
:
常量数组=[1,2,3,-3,4,-4,5,6,-6];
常数res=数组
.reduce((acc,cur,i)=>(i<(array.length-1))
?((cur+数组[i+1])==0)?acc.concat(i):acc
:acc
,[])。映射(n=>[n,n+1])
console.log(res)//索引数组[[2,3],[4,5],[7,8]]这对我来说并不是一个需要通过array#reduce解决的问题,但我可能没有正确地考虑它。有一种非常简单的(而且
O(n)
)方法,使用地图({}
JS中的对象)可能会更好地为您服务。谢谢CollinD,我会检查一下……但这是一系列来自冷入学考试的问题的一部分!我将提供地图解决方案作为答案。从技术上讲,它不能满足您使用reduce的要求,但它可能值得一读。哦,我们需要两个数字的位置。我想我们只需要第一个号码的位置。修好了,谢谢。
var two_sum = function(arr) {
var map = {};
for (var i = 0; i < arr.length; i++) {
var val = arr[i];
if (map.hasOwnProperty(val)) {
return [i, map[val]];
}
map[-1 * val] = i;
}
return null;
};