JavaScript没有';t在数组中检测indexOf-1
我有一个简单的脚本,它使fixture将数组的所有值与所有值进行匹配JavaScript没有';t在数组中检测indexOf-1,javascript,arrays,algorithm,indexof,Javascript,Arrays,Algorithm,Indexof,我有一个简单的脚本,它使fixture将数组的所有值与所有值进行匹配 const players = ['a', 'b', 'c', 'd']; const matches = []; players.forEach(k => { players.forEach(j => { if(k !== j) { let z = [k, j] z.sort() const inArray = matches.indexOf(z) !== -1
const players = ['a', 'b', 'c', 'd'];
const matches = [];
players.forEach(k => {
players.forEach(j => {
if(k !== j) {
let z = [k, j]
z.sort()
const inArray = matches.indexOf(z) !== -1
if(!inArray) matches.push(z)
console.log(matches)
}
})
})
尽管要求Javascript搜索z
是否在匹配的数组中,但结果有重复项并返回以下内容:
[ 'a', 'b' ]
[ 'a', 'c' ]
[ 'a', 'd' ]
[ 'a', 'b' ] --> duplicated item
[ 'b', 'c' ]
[ 'b', 'd' ]
[ 'a', 'c' ] --> duplicated item
[ 'b', 'c' ] --> duplicated item
[ 'c', 'd' ]
[ 'a', 'd' ] --> duplicated item
[ 'b', 'd' ] --> duplicated item
[ 'c', 'd' ] --> duplicated item
如何避免这些重复项?我想你的意思是如果(!inArray)匹配,。按(z)
,对吗?无论哪种方式,indexOf
都不会比较数组的值,而是实际检查引用等价性,即数组实例本身是否相等
为了正确比较数组的值,您可能需要编写一个helper函数来代替indexOf
我想你的意思是如果(!inArray)匹配,。推(z)
,对吗?无论哪种方式,indexOf
都不会比较数组的值,而是实际检查引用等价性,即数组实例本身是否相等
为了正确比较数组的值,您可能需要编写一个helper函数来代替indexOf
如果数组项始终是字符串,您可以做一些有点粗糙的事情,但可以完成任务
const players = ['a', 'b', 'c', 'd'];
const matches = [];
players.forEach(k => {
players.forEach(j => {
if(k !== j) {
let z = [k, j];
z.sort()
const inArray = matches.map(match=>match.join('')).indexOf(z.join('')) !== -1
if(!inArray) matches.push(z)
console.log(matches)
}
})
})
基本上,在比较之前将数组转换为字符串,这为javascript提供了一种检查数组是否相等的方法。检查数组实例之间的相等性不起作用,将返回不需要的结果 如果数组项始终是字符串,您可以做一些有点粗糙的事情,但可以完成任务
const players = ['a', 'b', 'c', 'd'];
const matches = [];
players.forEach(k => {
players.forEach(j => {
if(k !== j) {
let z = [k, j];
z.sort()
const inArray = matches.map(match=>match.join('')).indexOf(z.join('')) !== -1
if(!inArray) matches.push(z)
console.log(matches)
}
})
})
基本上,在比较之前将数组转换为字符串,这为javascript提供了一种检查数组是否相等的方法。检查数组实例之间的相等性不起作用,将返回不需要的结果 indexOf()。即:“a”==“a”//true
,但[]==[]//false
。试着看看为什么要调用z.sort()
?它们不是重复的。这是因为您正在对它们进行排序(例如,您的第二个['a',b']实际上是['b',a'],那么一个解决方案如何首先不生成这些重复项呢?players.forEach((v,i,a)=>{while(++i
或Array.from(new Set(players)).forEach(…)
如果播放器本身可能包含重复项。indexOf()
不接受数组。indexOf
寻找相等值,因此只有原语才会真正这样工作。例如:“a”==“a”//true
,但[]==[]//false
。试着看看你为什么调用z.sort()
?它们不是重复项。这是因为您正在对它们进行排序(例如,您的第二个['a',b']实际上是['b',a'],那么一个解决方案如何在一开始就不生成这些重复项呢?players.forEach((v,i,a)=>{while(++i
或数组。from(new Set(players)).forEach(…)
if播放器本身可能包含重复项。