提问人:wasphellion 提问时间:1/27/2023 最后编辑:wasphellion 更新时间:1/27/2023 访问量:81
比较两个数组并返回有效和放错位置的元素
Comparing two arrays and returning valid and misplaced elements
问:
我想为我的第一个项目制作一个简单的游戏,但我在它背后的逻辑上遇到了一些问题。 游戏应该比较两个数组,其中一个存储用户输入,另一个随机生成。两个数组的长度都为 n(假设 n=3),并接受 n 个唯一字符作为其值。假设用户输入是 ['A','A', 'B'],获胜组合是 ['B', 'A', 'C']。win 条件很简单,用户输入数组中的所有三个元素都必须有效。如果元素的值和索引都对应于第二个数组中的元素,则该元素有效。 检查这一点很简单:
for (let i = 0; i<arr1.length; i++) {
for (let j = 0; j<arr1.length; j++){
if (arr[i] === arr1[j] && getIndices(arr[i], arr1[j]) === true){
valid ++;
}
但是,我还想跟踪放错位置的元素,其中 arr[i] 与 arr[j] 的值匹配,但对其索引的相等检查返回 false。问题来了,如果我把它放在 else 语句中,并将 ['A', 'B', 'A'] 与 ['A', 'C', 'C'] 进行比较,它将返回 1 有效,但也有 1 放错了位置,这是不正确的,因为“A”只在第二个数组中出现一次。您将如何设置语句来避免这种情况?
我对此很陌生,所以我没有尝试太多。
答:
0赞
javigala98
1/27/2023
#1
这就是JS的方式。
const userList = ['A', 'B', 'C'];
const winList = ['A', 'B', 'A'];
const scoreCalculator = ({ user, win }) => {
let points = 0;
user.forEach((value, index) => {
if (value === win[index]) {
points++;
}
});
return points;
}
console.log(scoreCalculator({user: userList, win: winList}));
成本将为 O(n)。
正常执行。
const userList = ['A', 'B', 'C'];
const winList = ['A', 'B', 'A'];
const scoreCalculator = ({ user, win }) => {
let points = 0;
for(let i = 0; user.list; i++) {
if (user[i] === win[i]) {
points++;
}
});
return points;
}
console.log(scoreCalculator({user: userList, win: winList}));
正如你所看到的,Array.prototype.forEach()的工作方式与正常情况一样。
0赞
Musa Kavak
1/27/2023
#2
如果输入值和 win 条件的长度相同,则不需要两个 for 循环。并正确命名您的变量:和 。inputs
condition
var points = 0
var misplacedElements = []
for (let i = 0; i<inputs.length; i++) {
//findIndex returns index of the element on the condition array
//If element don't exist returns -1
const indexOfInput = condition.findIndex(e=> e === inputs[i])
if(indexOfInput != -1){
//Element contains but might not be on the same index
if(indexOfInput == i){
//On the same index so give a point
points++
}else{
//Hold the index or the element depends to your need
misplacedElements.push( i )
}
}
如果你不明白,你可以问。
评论
0赞
wasphellion
1/27/2023
我的错误,你是对的,但我将如何存储放错位置的元素?
0赞
Musa Kavak
1/27/2023
哦,我现在明白了。对不起,我会编辑它
评论