Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打印出所有副本-Javascript-需要替代解决方案_Javascript_Arrays_For Loop - Fatal编程技术网

打印出所有副本-Javascript-需要替代解决方案

打印出所有副本-Javascript-需要替代解决方案,javascript,arrays,for-loop,Javascript,Arrays,For Loop,说明 给定一个数组,打印出该数组中的所有副本。 let arr = [1, 2, 2, 3, 3, 4, 5, 5, 8, 8, 9, 10]; const result = arr.filter(x => arr.filter(y => y === x).length > 1); console.log(result); // 2, 2, 3, 3, 5, 5, 8, 8 所以,其他人善意地提供了这个答案,我理解,但我正在寻找替代方案,使用for循环 我想出了这个,但

说明

给定一个数组,打印出该数组中的所有副本。

let arr = [1, 2, 2, 3, 3, 4, 5, 5, 8, 8, 9, 10];

const result = arr.filter(x => arr.filter(y => y === x).length > 1);

console.log(result);

// 2, 2, 3, 3, 5, 5, 8, 8
所以,其他人善意地提供了这个答案,我理解,但我正在寻找替代方案,使用for循环

我想出了这个,但这只会回来

2,3,5,8
而不是我需要的上述结果

const result2 = () => {
  let newArray = [];

  for(let i = 0; i < arr.length; i++) {
    if(arr[i] === arr[i + 1]) {
      newArray.push(arr[i])
    }
  }
   return newArray
}

console.log(result2(arr));

// 2, 3, 5, 8
constresult2=()=>{
设newArray=[];
for(设i=0;i
我错过了什么?我需要它打印出所有副本,而不仅仅是告诉我哪些是副本。

您当前的

if(arr[i] === arr[i + 1]) {
不检查前一个元素是否相同(并且,即使更改为
| | arr[i]===arr[i-1]
,也将仅在排序数组上工作,这尚未声明为保证)

让arr=[1,2,2,3,3,4,5,5,8,8,9,10];
常量result2=()=>{
设newArray=[];
for(设i=0;i
让arr=[1,2,2,3,3,4,5,5,8,8,9,10];
var mem={};
var finalArr=[];
对于(变量i=0,j=arr.length;i1){
finalArr=[…finalArr,…mem[i]]
}
}
控制台日志(finalArr);

希望这对你有帮助

通过过滤已排序的数组

var-arr=[1,2,2,3,3,4,5,5,8,8,9,10];
arr.sort((a,b)=>a-b);
var res=arr.filter((v,i,a)=>a[i-1]==v|a[i+1]==v);

控制台日志(res)
不推arr[i],您也可以推arr[i+1],以便在新数组中获得两个副本。我刚刚尝试了
newArray.push(arr[i],arr[i+1])
,这很有效,请欣赏。
newArray.push(arr[i],arr[i+1])[1,3,5,3,3,3,7,2,1]
,我需要做什么才能确保它能够比较所有内容?啊,这很有意义,我感谢您提供的答案和时间复杂性。在这两种情况下,空间复杂度都会被考虑为<代码> O(n)< /代码>吗?是的,空间复杂度总是<代码> O(n)< /代码>,没有数组嵌套数组,对它为什么是<代码> o(n)< /代码>有什么简单的解释?我需要能够向某人解释它并让它在第一个代码片段中有意义,在代码的任何一点上,内存中只有两个数组:
arr
newArray
,这两个数组的大小都是
n
,最坏的情况是
O(n)
。在第二个代码段中,还有一个
countsByNum
对象,但它也只有
n
最大键值对,所以就像第一个代码段一样,总体空间复杂度是
O(n)
您提到我的if语句关闭了,我应该添加什么来确保所有内容都被检查?请记住排序有
O(n log n)
time complexity当输入数组中有两个以上的重复元素时,这将不起作用。
   let arr = [1, 2, 2, 3, 3, 4, 5, 5, 8, 8, 9, 10];
    var mem = {};
    var finalArr = [];
    for(var i = 0, j = arr.length; i< j; i++) {
        if(!mem.hasOwnProperty(arr[i])){
            mem[arr[i]] = [];
        }
        mem[arr[i]].push(arr[i]);
    }

    for(var i in mem) {
        if(mem.hasOwnProperty(i) && mem[i].length > 1) {
            finalArr = [...finalArr, ...mem[i]]
        }
    }
    console.log(finalArr);