我有一个初始数组(驱逐舰函数中的第一个参数),后跟一个或多个参数。我基本上想要使用后续的参数来确定最终将什么拼接出我的数组。
function destroyer(arr) {
var temp = [], j = 0;
for(var i= 1; i < arguments.length; i++){
temp.push(arguments[i]);
}
while(j < arr.length){
if(temp[j] === arr[j]){
arr.splice(j, 1);
}
j++;
}
return arr;
}
更新 如果我的描述模糊不清,我忘了包括如何执行它。
destroyer([1, 2, 3, 1, 2, 3], 2, 3) //should return [1, 1]
我刚回到原来的阵列?!
答案 0 :(得分:1)
是 Freecodecamp 挑战吗?这对我来说似乎很熟悉。
这是我解决问题的方法。
function destroyer(arr) {
var temp = [], j = 0;
for(var i= 1; i < arguments.length; i++){
temp.push(arguments[i]);
}
var resAr=[];
while(j < arr.length){
if(temp.indexOf(arr[j])===-1){
resAr.push(arr[j])
}
j++;
}
return resAr;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
答案 1 :(得分:0)
这应该有用但是它的大O(n ^ 2)因为它需要搜索将被删除的元素
function destroyer(arr) {
var temp = Array.prototype.slice.call(arguments);
for (var i=1;i<temp.length;i++) {
for (var j=0;j<arr.length;j++) {
if (temp[i] === arr[j]) {
arr.splice(j, 1);
}
}
}
return arr;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3))
答案 2 :(得分:0)
我建议采用一种不会改变原始数组的简单方法。由于使用哈希值,因此也具有O(n)的好处。
function notDestroyer(arr) {
var lookup = {};
var result = [];
for (var i = 1; i < arguments.length; i++) {
lookup[arguments[i]] = true;
}
for (var j = 0; j < arr.length; j++) {
if (!lookup[arr[j]]) {
result.push(arr[j]);
}
}
return result;
}