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

时间:2017-07-19 08:58:22

标签: javascript node.js

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

这是我的努力。



var_dump($_POST['n']);




3 个答案:

答案 0 :(得分:2)

我并不确切地了解inbuild函数是什么或内置函数的程度,所以我假设我不允许使用indexOfhasOwnProperty,{{1 ,},

Array.prototype.push

如果你想删除那些元素,那么我能做的最好的就是将元素保存到位,并给出最终数组的长度。但是在JavaScript中,它实际上是有效的,因为JavaScript中的数组只是可以使用额外属性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));进行枚举的对象。

length

答案 1 :(得分:0)

一行没有循环的vanilla 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加上便利包装 - 第二行是你可以使用的:

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重命名为更好的东西)。

答案 2 :(得分:0)

                   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' }];