gpt4 book ai didi

javascript - 递归减少连续重复数字的数组

转载 作者:行者123 更新时间:2023-12-04 09:04:01 28 4
gpt4 key购买 nike

基本挑战是通过将相邻的克隆加在一起来减少数字数组(具有连续重复的特征):

const sumClones = (numbers) => {
if (Array.isArray(numbers)) {
return numbers.reduce((acc, elem, i, arr) => {
if (elem !== arr[i - 1]) acc.push(elem);
else acc[acc.length - 1] += elem;
return acc;
}, []);
}
};

sumClones([1,1,2,1,1,1,1,2,1,1,1]) => [2,2,4,2,3]

现在,我正在尝试编写另一个递归运行 sumClones 的函数 reduceClones,以便最终输出不包含连续的重复项

const reduceClones = (numbers) => {
let result = sumClones(numbers);
while (result[0] === result[1]) {
result = sumClones(result);
}
return result;
};

reduceClones([1,1,2,1,1,1,1,2,1,1,1]) => [8,2,3]

有更好的方法吗?

最佳答案

通过以 Haskellesque 方式使用数组解构,您可以执行以下操作;

function sumNeigboringDupes([x1,x2,...xs]){

function add2Head(a,[b,...rest]){
return [a+b].concat(...rest);
}

return xs.length ? x1 === x2 ? add2Head(x1,sumNeigboringDupes([x2,...xs]))
: [x1].concat(sumNeigboringDupes([x2,...xs]))
: x1 === x2 ? [x1 + x2]
: [x1, x2 || []];
}

var arr = [1,1,2,1,1,1,1,2,1,1,1,4,4,1];
console.log(JSON.stringify(sumNeigboringDupes(arr)));

提示 [x1,x2,...xs] sumNeigboringDupes 函数的参数只需要一个数组并赋值 x1 到第一项,x2 到第二项,xs 是分配给数组其余部分的数组。 add2Head 函数参数中的数组解构也以类似的方式工作。

关于javascript - 递归减少连续重复数字的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45985914/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com