gpt4 book ai didi

javascript - 过滤非 -"linear",数组中的渐进值

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:46 25 4
gpt4 key购买 nike

我不太确定如何解释这一点,但请耐心等待...

我编写了一个程序来创建长度范围为 0-4 的随机数组,如下所示:[][n][n, n][n,n,n][n,n,n,n]

输入将是 1-6 之间的随机数字,输出 n 始终是输入的倍数。例如,输入可能是 2,输出可能是 [2][4,8][2, 4,6]

输出总是从最低值到最高值排序。

输入将始终是最低倍数,而最高倍数将始终是 input * 4 的值。例如,如果输入为 3,则输出范围为 3-12 或 3、6、9 和 12。

假设,假设输入是 4,而输出(如果有的话)当然是 4 的倍数。

唯一可能的输出是...

[][4][8][12][16][4,8][4,12][4,16][8,12][8,16][12,16][4,8,12][4,8,16][4,12,16][8,12,16][4,8,12,16]

我想做的是过滤输出,以便只有上面的粗体数组有效。除此之外,我想保留所有有效的数组元素,同时删除所有非“线性”、渐进的元素,如下所示:

  • [4,12] 会变成 [4]
  • [4,8,16] 会变成 [4,8]
  • [8,16] 会变成 []
  • [8,12,16] 会变成 []
  • [12,16] 会变成 []

我最终弄清楚了如何实现这一目标,但无论出于何种原因,我花了一些时间来解决这个问题;所以现在我很好奇。有没有另一种方法可以实现比以下代码更有效的输出?是否可以用某种循环做同样的事情?有没有已知的算法可以处理这类事情?

    if (a[0] != 4) {
a = [];
} else if (a.length === 2 && a[1] != 8) {
a.pop();
} else if (a.length === 3 && a[1] != 8) {
a.pop();
a.pop();
} else if (a.length === 3 && a[2] != 12){
a.pop();
}

最佳答案

Array.prototype.filter回调以来可以处理索引参数,它可以直接用于仅返回“正确”索引处的值:

function filterOnFactor(arr, factor){
return arr.filter((val,i) => ++i * factor == val);
}

//test
for(let arr of [[], [4], [8], [12], [16], [4, 8], [4, 12], [4, 16], [8, 12], [8, 16], [12, 16], [4, 8, 12], [4, 8, 16], [4, 12, 16], [8, 12, 16], [4, 8, 12, 16]]){
console.log(JSON.stringify(arr), '->', JSON.stringify(filterOnFactor(arr,4)));
}

注意,这仅在源始终是递增的多个因子时才有效,因此 [6,8,12] 仍会返回 [8,12] , 但根据信息,源始终生成为上升的群众。


只是为了好玩,还有一个使用生成器函数的解决方案(对所有输入都是安全的)

function* filterOnFactor(arr, factor){
for(let i=0; i< arr.length; i++){
if(arr[i] !== ++i * factor)break;
yield arr[--i];
}
}

//test
for(let arr of [[], [4], [8], [12], [16], [4, 8], [4, 12], [4, 16], [8, 12], [8, 16], [12, 16], [4, 8, 12], [4, 8, 16], [4, 12, 16], [8, 12, 16], [4, 8, 12, 16], [6,8,12]]){
console.log(JSON.stringify(arr), '->', JSON.stringify([...filterOnFactor(arr,4)]));
}

关于javascript - 过滤非 -"linear",数组中的渐进值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44300203/

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