Web 前端开发 让前端飞

【Javascript】寻找另一半

2017-11-28  本文已影响0人  雨水之后

有一个能力数组[7,9,11,13,15],按照最佳组合值为20来计算,只有7+13和9+11两种组合。而7在数组的索引为0,13在数组的索引为3,9在数组的索引为1,11在数组的索引为2。

所以我们说函数:pairwise([7,9,11,13,15],20) 的返回值应该是0+3+1+2的和,即6。

function pairwise(arr, arg) {

  //把数组复制一个,在函数内使用
  var pairArr = arr.slice();

  //使用reduce方法去进行累加,并设定初始值为0用于返回结果
  return pairArr.reduce(function(acc,curValue,curIndex){

    //获取目标值与当前被测试值的差,便于在数组中寻找匹配
    var diff = arg - curValue;

    //如果数组中有差值,并且差值的index不是当前值的话
    if(pairArr.indexOf(diff)!=-1&&pairArr.indexOf(diff)!=curIndex){

      //把两个数的index相加
      var total = pairArr.indexOf(diff) + curIndex;

      //把以上步骤中刚被测试的两个数删除并替换为NaN,避免重复查询,也避免了index值发生混乱
      pairArr.splice(curIndex,1,NaN);
      pairArr.splice(pairArr.indexOf(diff),1,NaN);

      //计入累加器acc
      return acc + total;
    }

    //返回累加器中的值
    return acc;

  },0);

}

THE END.

上一篇下一篇

猜你喜欢

热点阅读