【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.