Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用reduce查看数组的两个值在JavaScript中是否生成零_Javascript_Arrays - Fatal编程技术网

使用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;
};