我有一个数组,我想两次查找哪个元素。
我想到了为原始数组中的每个元素创建一个新数组,而没有该元素。该数组包含相同的元素,但在将要处理的元素切片之后。然后,我们尝试在此新数组中找到它:因此,如果它在原始数组中存在两次,它将存在并且它将返回“ true”,否则,它将不在新数组中并且根据我的代码将返回“ false”。
let arr = ["stephanie", "alex", "steven", "alex"]
function double(name) {
arr.forEach((name, index) => {
let newarr = arr.slice(index);
console.log(newarr);
const searchedelement = newarr.find(name === nom);
console.log(searchedelement);
})
}
console.log(double(name))
答案 0 :(得分:2)
如果整个数组中只有一个double,请使用以下命令:
let arr = ["stephanie", "alex", "steven", "alex"]
res = arr.filter(v => arr.indexOf(v) !== arr.lastIndexOf(v))[0];
console.log(res)
如果预期会有不同的双打,请使用此:
let arr = ["stephanie", "alex", "steven", "alex","steven"]
res = [...new Set(arr.filter(v => arr.indexOf(v) !== arr.lastIndexOf(v)))];
console.log(res)
重要:两种代码片段均可进行任何形式的重复,因此,如果您要检查是否恰好发生了两次,则需要更改!
如果您只希望双打是实际的双打,而不是三重,或者其他任何原因,请考虑以下事项:
let arr = ["stephanie", "alex", "steven", "alex","steven", "alex"]
res = Object.entries(arr.reduce((a,c) => {a[c] = (a[c] || 0 ) + 1; return a},{}))
.filter(v => v[1] == 2).map(v => v[0]);
console.log(res)
答案 1 :(得分:1)
要达到预期效果,请使用usind reduce的以下选项仅循环一次
let arr = ["stephanie", "alex", "steven", "alex"]
function double(arr){
const dup =[]
arr.reduce((acc, v) => {
acc[v] = acc[v] ? dup.push(v) : 1;
return acc
}, {});
return dup
}
console.log(double(arr))
选项2:只是要检查是否存在重复项,只需使用“设置并比较长度”
let arr = ["stephanie", "alex", "steven", "alex", "steven"]
function double(arr){
const uniq = [...new Set(arr)]
return arr.length !== uniq.length
}
console.log(double(arr))
答案 2 :(得分:0)
您可以通过检查数组中找到值的次数来过滤数组。
然后,构造一个Set
对象以消除所有重复项。
const arr = ['joe', 'steph', 'john', 'joe', 'thomas', 'john'];
console.log(
[...new Set(arr.filter(e => arr.filter(s => s === e).length > 1))]
);
答案 3 :(得分:0)
您可以尝试使用
let arr = ["stephanie", "alex", "steven", "alex"];
function isDouble(arr) {
let isDouble = false;
for(let el of arr) {
if(arr.filter(element => element != el).length === arr.length-2){
isDouble = true;
break;
}
};
return isDouble;
};
console.log(isDouble(arr));