在 JS 数组中查找顺序值



这段代码有什么问题?

我正在尝试一个简单的纸牌游戏,看看是否有直的。

逻辑是只检查数组中的下一个值是否是当前值 + 1

let arr = [ 
	[ 'd', 13 ], 
[ 'f', 12 ], 
[ 'z', 11 ], 
[ 'd', 10 ], 
[ 'd', 9 ] 
];
arr = arr.sort((a,b) => a[1] - b[1]);
const isSeq = arr => {
for (let i = 0; i < arr.length - 1; i++) {
console.log(arr[i][1]+1, arr[i+1][1])
if (arr[i][1]+1 !== arr[i+1][1]) {
	return false;
} else {
	return true;
}
}
}
isSeq(arr);

您需要删除 else 部分,因为即使在第一次迭代中为 true,这也会退出函数。

let arr = [[ 'd', 13 ], [ 'f', 12 ], [ 'z', 11 ], [ 'd', 10 ], [ 'd', 9 ]];
arr = arr.sort((a, b) => a[1] - b[1]);
const isSeq = arr => {
for (let i = 0; i < arr.length - 1; i++) {
console.log(arr[i][1] + 1, arr[i + 1][1]);
if (arr[i][1] + 1 !== arr[i + 1][1]) {
return false;
}
}
return true;
};
console.log(isSeq(arr));

第一次检查后,您很快就会以某种方式返回。

if (arr[i][1]+1 !== arr[i+1][1]) {
return false;
} else {
return true;
}

完成所有检查后,您应该返回:

for (let i = 0; i < arr.length - 1; i++) {
console.log(arr[i][1]+1, arr[i+1][1])
if (arr[i][1]+1 !== arr[i+1][1]) {
return false;
}
}
return true;

您也可以使用Array#every()执行此操作:

let arr = [
['d', 13],
['f', 12],
['z', 11],
['d', 10],
['d', 9]
];
arr = arr.sort((a, b) => a[1] - b[1]);
function isSeq(data) {
return data.every((num, i) => (i === data.length - 1) || (num[1] === (data[i + 1][1] - 1)));
}
console.log(isSeq(arr));

这首先检查索引是否是最后一个,如果不是,请确保当前元素等于array[i+1]-1

if elsereturn一起使用,您可以使用break

将第一个值作为当前值,并迭代输入的其余部分。将每个条目与当前条目进行比较。如果序列中断,请从循环中断。在移动到下一个条目之前,请将其设置为新电流。

let arr = [ 
	[ 'd', 13 ], 
[ 'f', 12 ], 
[ 'z', 11 ], 
[ 'd', 10 ], 
[ 'd', 9 ] 
];
arr = arr.sort((a,b) => a[1] - b[1]);
const isSeq = arr => {
let isStraight = true
let current = arr[0][1]
for (let i = 1; i < arr.length; i++) {
if (arr[i][1] !== current + 1) {
isStraight = false
break
}
current = arr[i][1]
}
return isStraight
}
console.log(isSeq(arr))

最新更新