gpt4 book ai didi

javascript - 按索引和匹配值过滤数组

转载 作者:可可西里 更新时间:2023-11-01 01:54:25 24 4
gpt4 key购买 nike

我想过滤掉老虎机的模式,在这种情况下,如果它们具有相同的值,我希望选择以下索引。

如果索引 0、2 和 6 具有相同的值,则应该输出。我在想像这样的函数调用可能是这样的

if (win_filter([0, 2, 6] == "slot-2") {
console.log("You won");
}

我的代码如下。

var final_score = new Array();

$(".shoot").click(function() {

//var numbers_array = ["slot-1", "slot-1", "slot-1", "slot-1", "slot-1", "slot-2", "slot-2", "slot-2", "slot-2", "slot-3", "slot-3", "slot-3", "slot-4", "slot-4", "slot-5"];
var numbers_array = ["slot-1", "slot-2", "slot-3", "slot-4", "slot-5"];
var target = $("div.window table");

target.find("tr td > div").each(function() {
$(this).fadeOut(function() {
$(this).removeAttr('class');
$(this).addClass(numbers_array[Math.floor(Math.random() * numbers_array.length)]);
$(this).fadeIn();
final_score.push($(this).attr("class"));
});
});

function filterResults(arr) {
return final_score.filter(function(el) {
return arr.some(function(e) {
return el.timeframe == e;
});
});
}

var result = filterResults(['0','2','6']);
console.log(result);

$.each(numbers_array, function(index, value) {
if (result == value) {
$(".notice").html("You have won.").addClass("success").show();
console.log("You won!");
}
});
console.log(final_score);
});

编辑

如果不清楚我指的是数组中的索引,如果我从这个生成的数组中选择索引 0、2 和 6,那么它们的值将是(即使它们不相同)。

0 => "slot-2", 2 => "slot-5", 6 => "slot-1"

目标是检查所选索引是否具有相同的值输出。并且索引的数量不应该被硬编码,它可以是从 3 个索引搜索到 5 个索引搜索的任何值。

jsFiddle.net

Array[0]
0 : "slot-2"
1 : "slot-3"
2 : "slot-5"
3 : "slot-5"
4 : "slot-4"
5 : "slot-3"
6 : "slot-1"
7 : "slot-4"
8 : "slot-1"
9 : "slot-2"
10 : "slot-2"
11 : "slot-4"
12 : "slot-5"
13 : "slot-1"
14 : "slot-4"

最佳答案

首先,我避免对您的代码进行任何重大修改,因此在 jsfiddle 中我在您期望的地方(在 on('click') 内)准确地编写了验证。

我做了什么:

在计算任何东西之前,我们需要插槽数据。您已经将它保存在 final_score 中,但是这样做的函数是一个回调。值得等待回调吗? - 我不这么认为,因为它是一个简单的 css (fadeOut) 动画。

const classVal = numbers_array[Math.floor(Math.random() * numbers_array.length)];
$(this.fadeOut(function() { // Rest of your code }
final_score.push(classVal);

计算每一行的长度,你知道它们的长度都是相等的,你把它们都放在一个数组中 (final_score),所以简单地除以行数就足够了.

const lines = 3;
const lineLength = final_score.length/lines;

对于每一行,我们检查其他行的值是否与这一行相同。鉴于您的数组顺序不是基于显示顺序而是基于您生成它们的顺序,我们可以简单地检查具有相同索引的数组(但遍历每一行)。

final_score[i] === final_score[i+lineLength] && final_score[i] === final_score[i+lineLength*2]

导致:

  const lineLength = final_score.length/3;
for(let i=0; i<lineLength; i++) {
if (final_score[i] === final_score[i+lineLength] && final_score[i] === final_score[i+lineLength*2]) {
console.info(`win col ${i}`);
}
}

如果你需要它,你可以很容易地n-ify这个。

  const lineLength = final_score.length/3;
for(let i=0; i<lineLength; i++) {
const lineOneSlot = final_score[i];
let allEqual = true;
for (let j=1; j<lines; j++) {
console.info(`Comparing ${i} ${i+lineLength*j}`);
if (lineOneSlot !== final_score[i+lineLength*j]) {
allEqual = false;
break;
}
}
if (allEqual) {
console.info(`win col ${i}`);
}
}

由于您还要求进行对 Angular 线检查,因此它看起来像这样:

但是,您必须确保网格是正方形才能获得预期的结果。否则,您将不得不重新定义在这些情况下究竟要做什么。

final_score[i] === final_score[i+1+lineLength] && final_score[i] === final_score[i+line+lineLength*line]

https://jsfiddle.net/qjp7g0qL/3/

关于javascript - 按索引和匹配值过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550195/

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