从初始数组中删除与初始数组后跟的参数值相同的所有元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从初始数组中删除与初始数组后跟的参数值相同的所有元素相关的知识,希望对你有一定的参考价值。

有一个初始数组(驱逐舰函数中的第一个参数),后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。

这是我的代码,但我无法解决问题。

function destroyer(arr) {
// First I have converted the whole input into an array including the arguments
var args = Array.prototype.slice.call(arguments);
var abc=args.splice(0,1);//Here I have taken out the array part i.e[1,2,3,1,2,3] and also now args contain 2,3 only

function des(abc){
           for(var i=0;i<abc.length;i++){//I tried to check it for whole length of abc array
                if(args.indexOf(abc)===-1){
   return true;   //This should return elements of [1,2,3,1,2,3] which are not equal to 2,3 i.e [1,1] but for string inputs it is working correctly.How to do for these numbers?
     }
  }
}
return arr.filter(des); //but this filter function is returning  empty.How to solve my problem??
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

对于驱逐舰([“树”,“汉堡”,53],“树”,53)代码给出输出[“汉堡包”],这是正常的。

但对于驱逐舰([1,2,3,1,2,3],2,3);代码没有输出。

答案

试试这个:

function destroyer(arr) {
    var args = Array.prototype.slice.call(arguments, 1);

    function des(abc){
        return args.indexOf(abc) === -1;
    }
    return arr.filter(des);
}
var result = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
document.getElementById('output').innerhtml = JSON.stringify(result);
<pre id="output"></pre>
另一答案

你可以使用Array.filter。下面的例子描述了相同的

destroyer([1, 2, 3, 1, 2, 3], 2, 3);也是[1, 2, 3, 1, 2, 3]的第一个参数,2排名第二,3排名第三。所以arr将是[1, 2, 3, 1, 2, 3]而不是[1, 2, 3, 1, 2, 3], 2, 3

function removeElementFromArray(arr,num){
  var _temp = arr.filter(function(item){
      return (item !== num);
  });
  
  return _temp;
}

(function main(){
  var arr = [1,1,1,2,4,3,2,4,5,4,3,1,4,5,2];
  var result = removeElementFromArray(arr,1);
  var result1 = removeElementFromArray(arr,3);
  
  console.log(result, result1);
})()
另一答案

Lodash没有可用的方法。

link to doc

来自lodash docs:

_.without(array,[values])

使用SameValueZero创建一个排除所有提供值的数组,以进行相等比较。

例:

_.without([1, 2, 1, 3], 1, 2);
// → [3]
另一答案

这应该适合你:

function destroyer(arr) {
    var args = Array.prototype.slice.call(arguments);
    var abc = args.splice(0, 1);
    function des(value) {
        // you don't need loop here, just check if given value is in args array
        return args.indexOf(value) === -1;
    }
    // splice returns array of deleted elements so that your first argument is abc[0]
    return abc[0].filter(des);
}
var result = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
console.log(result);
另一答案

试试这个简单的代码:

function destroyer(arr) {
  /* Put all arguments in an array using spread operator and remove elements 
     starting from 1 */
  const args = [...arguments].splice(1);
  /* Check whether arguments include elements from an array and return all that 
     do not include(false) */
  return arr.filter(el => !args.includes(el));
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3); // [1, 1]

以上是关于从初始数组中删除与初始数组后跟的参数值相同的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

Chapter5_初始化与清理_数组初始化与可变参数列表

实验四

js查找数组中出现次数最多的元素

数组的splice 与 slice有啥区别

如何在构造函数中初始化具有相同值的对象数组

Java细节整理——数组与内存控制