首页 > 解决方案 > 寻求帮助为JS编写函数以完成任务

问题描述

我需要编写一个进行以下计算的函数:

param1 + param2 - param3 + param4 – param5…

并保持这种模式。如果遇到任何非数字字符,则将其值的 1/4 计算为数值。结果应该截断精度。

例如

function(11,’a’,2,30,’z’,3) returns 35

11 + (97/4) - 2 + 30 - (122/4) + 3

不能使用String内置函数:

endsWith()
includes() 
indexOf()
lastIndexOf()
localeCompare()
match()
repeat()
replace()
search()
slice()
split()
startsWith()
substr()
substring()
toLocaleLowerCase()
toLocaleUpperCase()
toLowerCase()
toString()
toUpperCase()
trim()
trimLeft()
trimRight()
valueOf()

我也不能使用Array内置函数

concat()
copyWithin()
every()
fill()
filter()
find()
findIndex()
forEach()
indexOf()
isArray()
join()
lastIndexOf()
map()
pop()
push()
reduce()
reduceRight()
reverse()
shift()
slice()
some()
sort()
splice()
toString()
unshift()
valueOf()

标签: javascript

解决方案


这是一个镜头:

const d = (...a) => {
  let total = a[0];
  
  for (let i = 1; i < a.length; i++) {
    total += (+a[i] == a[i] ? a[i] : Math.round(a[i].charCodeAt(0) / 4)) * (i & 1 ? 1 : -1);  
  }
  
  return total;
};

console.log(d(11, 'a', 2, 30, 'z', 3));

解释:从第一个参数开始累计。如果当前元素不是整数,则将其转换为 1 并除以 4 并舍入(未截断)结果。最后,根据索引的奇偶性乘以 1 或 -1 以交替加减。

PS:最好自己先尝试这些问题,而不是让我们玩得开心!


推荐阅读