嗨,在我的第一个nodejs访谈中,面试官要求我从未排序的数组中删除所有重复元素,而不使用任何内置函数,在最小TC中使用java脚本,而不使用任何其他数组。
这是我的努力。
var_dump($_POST['n']);

答案 0 :(得分:2)
我并不确切地了解inbuild函数是什么或内置函数的程度,所以我假设我不允许使用indexOf
,hasOwnProperty
,{{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)
因为这看起来像是一个家庭作业,所以至少要努力使解决方案变得有趣。
这是我的第一个解决方案,但它使用内置的.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' }];