我正在尝试从以下数组中获取结果 [1,1,1,1,2,2,20,20]。
基本上,我试图将所有重复值推送到新数组中,但是没有得到想要的结果。请求你帮忙。
const array = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20];
const dupArray = (arr) => {
let newArray = array.sort();
let filteredArray = [];
for (y = 0; y < newArray.length; y++) {
for (i = y + 1; i < newArray.length; i++) {
if (newArray[y] === newArray[i]) {
filteredArray.push(newArray[i]);
}
}
}
return filteredArray
};
console.log(dupArray());
答案 0 :(得分:0)
我认为预期的结果应该是:[1, 1, 1, 1, 2, 2, 2, 20, 20]
代码:
const array = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20]
const dupArray = (arr) => Object
.entries(arr.reduce((a, c) => (a[c] = ++a[c] || 1, a), {}))
.filter(e => e[1] > 1)
.map(e => Array(e[1]).fill(+e[0]))
.flat(1)
console.log(dupArray(array))
答案 1 :(得分:0)
首先,我在 array.sort() 中传入了一个自定义排序函数,用于递增序列。
使用标志 hasDuplicates
来检查它之前是否有重复项,如果没有,则将该元素两次附加到数组中。
最后,为了避免重新处理元素,我将 y
设置为 i-1
。
就效率而言,这应该是好的,因为数组只线性遍历一次。
const array = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20];
const dupArray = (arr) => {
let newArray = array.sort((a, b) => a - b);
let filteredArray = [];
for (y = 0; y < newArray.length; y++) {
let hasDuplicates = false;
for (i = y + 1; i < newArray.length; i++) {
if (newArray[y] === newArray[i]) {
filteredArray.push(newArray[i]);
if(!hasDuplicates) {
filteredArray.push(newArray[i]);
hasDuplicates = true;
}
} else {
y = i - 1;
break;
}
}
}
return filteredArray
};
console.log(dupArray());
答案 2 :(得分:0)
我希望这对你有用,只是重复数组。
String prevStr = origList.get(0).substring(1,4);
for (int i = 0; i < A.size(); i++) {
if(prevStr.equals(origList.get(i).substring(1,4)) {
//add it to an ArrayList
}else{
//create new list
}
prevStr = origList.get(i).substring(1,4);
}
答案 3 :(得分:0)
您可以使用简单的过滤功能
const array = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20];
const dupArray = (arr) => arr.filter( x =>
arr.filter(y => y === x).length > 1
).sort()
console.log(dupArray(array))
逻辑如下
y
如果您对 y
元素进行过滤,则数组的大小应大于 1答案 4 :(得分:0)
这里是排序数组的两种解决方案。我相信所需的输出应该是 [1,1,1,1,2,2,2,20,20]
const array = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20];
//First solution
const dupArray = (arr) => {
arr = arr.sort((a,b) => a-b);
let filteredArray = [];
let currentElement = null;
for(let i = 0; i < arr.length; i ++){
if(arr[i] === currentElement){
filteredArray.push(arr[i]);
}else{
currentElement = arr[i];
if(arr[i] === arr[i+1]){
filteredArray.push(arr[i]);
}
}
}
return filteredArray;
};
//Second solution
const dupArray2 = (arr) => {
arr = arr.sort((a,b) => a-b);
for(let i = 0; i < arr.length; i ++){
if(arr[i] != arr[i-1] && arr[i] != arr[i+1]){
arr.splice(i,1);
i -= 1;
}
}
return arr;
};
console.log(dupArray(array));
console.log(dupArray2(array));