NodeJS 从未排序数组中删除重复元素,而不使用任何内置函数或节点js中的任何其他数组变量?

mcdcgff0  于 2023-03-01  发布在  Node.js
关注(0)|答案(5)|浏览(138)

嗨,在我的第一次nodejs面试中,面试官要求我从一个未排序的数组中删除所有重复的元素,而不使用任何内置函数,在最小TC中使用java脚本,也不使用任何其他数组。
这是我的努力。

var input = [1, 2, 3, 3, 4, 5,2, 6,3,6,1];
var current = input[0];
var found = false;
function removeDuplicate() {
    for (var i = 0; i < input.length; i++) {
        if (current == input[i]) {
            //found = false;
        } else if (current != input[i]) {
            console.log(" " + current);
            current = input[i];
            found = false;
        }
    }
    console.log(" " + current);

}
removeDuplicate();
smtd7mpg

smtd7mpg1#

我不太清楚什么是内置函数,或者函数的内置程度如何,所以我假设不允许使用indexOfhasOwnPropertyArray.prototype.push ......

const input = [1, 2, 3, 3, 4, 5,2, 6,3,6,1];

function removeDuplicate(arr) {
    const result = [];
    let idx = 0;
    const tmp = {};

    for (let i = 0; i < arr.length; i++) {
        if (!tmp[arr[i]]) {
            tmp[arr[i]] = 1;
            result[idx] = arr[i];
            idx++;
        } 
    }
    return result;
}

console.log(removeDuplicate(input));

如果你想删除元素,那么我能做的最好的就是保存元素,并给予最终数组的长度,但在JavaScript中,它实际上是有效的,因为JavaScript中的数组只是一个可枚举的对象,有一个额外的属性length

const input1 = [1, 2, 3, 3, 4, 5,2, 6,3,6,1];
const input2 = [1, 2, 3, 3, 4, 5,2, 6,3,6,7];

function removeDuplicate(arr) {
    let length = 0;
    const tmp = {};

    for (let i = 0; i < arr.length; i++) {
        if (!tmp[arr[i]]) {
            tmp[arr[i]] = 1;
            arr[length] = arr[i];
            length++;
        }
    }
    
    // the last element is not a duplicate
    if (!tmp[arr[arr.length-1]]) {
        length--;
    }
    arr.length = length;
    return arr;
}

console.log(removeDuplicate(input1));
console.log(removeDuplicate(input2));
z4bn682m

z4bn682m2#

一行没有循环的普通JavaScript

既然这看起来像是家庭作业,那么至少要努力让解决方案变得有趣。
这是我的第一个解决方案,但它使用了一个内置的.filter()方法:

const removeDuplicate = (c=>a=>a.filter(e=>!(c[e]||(c[e]=1)&&0)))({});

下面是另一个不使用内置函数的解决方案:

const f = (c=>(h,...r)=>h?(c[h]|=0)||c[h]++?f(...r):[h,...f(...r)]:[])({});
const removeDuplicate = a => f(...a);

这里有一行普通的JavaScript加上一个方便的 Package 器--第二行是这样用途:

console.log(removeDuplicate(input));
// or with literals:
console.log(removeDuplicate([1, 2, 3, 3, 4, 5, 2, 6, 3, 6, 1]));

但如果你不介意的话

console.log(f(...input));
// or with literals:
console.log(f(1, 2, 3, 3, 4, 5, 2, 6, 3, 6, 1));

然后您可以删除第二行(当然也可以将f重命名为更好的名称)。

ldxq2e6h

ldxq2e6h3#

let arrayB = [
                                 {id: 1, name: "abc"}, 
                                 {id:2, name: "abccc"},
                                 {id: 2, name: "xyz"}, 
                                 {id:3, name: "abccc"},
                                 {id: 4, name : "asdada"}
                                ];
                   function findRepeatedObject(arr){
                       var newObj={};
                       var newArr=[];
                       for(i=0;i<arr.length; i++){
                            if(newObj[arr[i].id]){
                                newObj[arr[i].id]+=1;
                              }else{
                                newObj[arr[i].id]=1;
                                newArr.push(arr[i])
                              }
                          }
                          return newArr;
                        }   
                       console.log(findRepeatedObject(arrayB));
               //output will be [{ id: 1, name: 'abc' },{ id: 2, name: 'abccc' },{ id: 3, name: 'abccc' },{ id: 4, name: 'asdada' }];
wlzqhblo

wlzqhblo4#

var arr=[
{id: 1, "name": "kumar"}, 
{id: 1, "name": "kumar"}, 
{id: 2, "name": "kumar1"}, 
{id: 2, "name": "kumar1"}, 
{id: 3, "name": "kumar2"}
];
var res=[];
var count={};
arr.forEach((el,ind)=>{
   count[el.id]=(count[el.id] || 0)+1;
   if(count[el.id]<2){
        res.push(el);
   }
})
 console.log(res)//[{ id: 1, name: 'kumar' },{ id: 2, name: 'kumar1' },{ id: 3, name: 'kumar2' }]enter code here
jvidinwx

jvidinwx5#

let arr =[1, 2, 3, 3, 4, 5,2, 6,3,6,1];
        function removeduplicate(arr){
        let result = [],k=0,lastoccur;
        for(let i = 0;i<arr.length;i++){
            for(let j = 0;j<arr.length;j++){
                if(arr[i] == arr[j]){
                    lastoccur= j 
                }
            }
            if(i === lastoccur){ 
                result[k] = arr[i];
                k++;

            }
        }
        return result;
        }
        console.log(removeduplicate(arr));

相关问题