gpt4 book ai didi

javascript - 从数组 X 反向扫描中获取 N 个值的数组(不存在于 "exclude"数组)并改变 X 数组以删除添加的项目

转载 作者:行者123 更新时间:2023-12-03 09:53:58 24 4
gpt4 key购买 nike

我有一个名为 queue 的数组,其中包含一些有限值。我希望 queue “从最后一个索引开始扫描”result 数组中最多有 2 条记录,其中要添加的值 result 不应存在于 exclude 数组中。

简而言之条件是:

  • 需要从右到左扫描queue数组。
  • 如果在exclude 数组中没有找到扫描的值,则应将该值添加到result 数组中。
  • 当这样获得的result数组的长度为最大长度N时,或者当到达queue数组的末尾时,该过程应该终止。<
  • queue 数组应在此过程中发生变化,即在将值添加到 result 后,应从 queue 数组中删除该值(或者最后可以被移除都没有关系,但应该在进程终止时观察到)。

举个例子:

let queue = [7, 9, 3, 4, 5];
let exclude = [4, 6, 10];
let resultCount = 2; // result's maximum length
let result = []; // will contain the result values

预期的最终结果如下所示:

result = [5, 3]; // can be in any order
queue = [7, 9, 4]; // mutated queue

在这里,从最后一个索引开始扫描,发现值 5 是唯一的,并将其添加到 result 数组中,但值 4 被跳过,因为它存在于 exclude 数组中。然后发现值 3 是唯一的,并将其添加到 result 数组中。由于 result 数组的最大大小已达到 2,即 [5, 3],因此该过程终止。匹配值也将从 queue 数组中删除,在过程结束时留下数组 [7, 9, 4]

有什么办法可以实现这种行为吗?

最佳答案

使用 while 循环并遍历您的 queue backwars,直到您到达 0th 索引或您到达您的 resultsCount,您可以检查每个 queue 元素是否在您的 exclude 数组中。如果不是,您可以使用 .push() 将此元素添加到您的 result 数组,然后使用 queue 将其删除.splice(index, 1).

请看下面的例子:

let queue = [7, 9, 3, 4, 5];
let exclude = [4, 6, 10];
let resultCount = 2; // result's maximum length
let result = []; // will contain the result values

let i = queue.length-1; // get last index in queue
while(result.length < resultCount && i >= 0) { // keep looping your queue array until you either reach your resultsCount or you get to index -1
const curr = queue[i]; // get the current queue item
if(!exclude.includes(curr)) { // if the current item is not inside your exclude array...
result.push(curr); // push the current element into the resulting array
queue.splice(i, 1); // remove it from the queue
}
i--; // decrement i
}
console.log(result);
console.log(queue);

如果您的排除数组中有很多元素,您也可以使用 Set 来帮助提高效率。

使用 .filter() 也不错,但它会创建新数组而不是就地修改:

let queue = [7, 9, 3, 4, 5];
const exclude = new Set([4, 6, 10]);
const resultCount = 2; // result's maximum length

const result = queue.filter(n => !exclude.has(n)).slice(resultCount);
queue = queue.filter(n => !result.includes(n));
console.log(result);
console.log(queue);

关于javascript - 从数组 X 反向扫描中获取 N 个值的数组(不存在于 "exclude"数组)并改变 X 数组以删除添加的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60388174/

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