我如何 remove/filter 数组中的特定项目?

How do I remove/filter specific items from an array?

我正在编写一个脚本,我想删除一个名为 uniqueWords 的数组的一些特定元素。我要删除的元素如下:""" ""\n"。为此,我尝试了:

var removeArray = _.remove(uniqueWords, function (word) {return word === '' || word === ' ' || word === '\n'});
var removeArray2 = _.remove(uniqueWords, function (word) {return _.indexOf(['', ' ', '\n'], word) !== -1});

console.log(removeArray);
console.log(removeArray2);

我正在使用名为 loadash 的 js class,但我得到了以下结果:

["", " ", "↵"]

[]

我的完整代码如下:

<!DOCTYPE html>

<html>

<script src="lodash.js"></script> 

<body>
<p id="demo"></p>

<textarea cols=150 rows=15 id="texto">
"RBD|X|RBD|C|92173~GJHGWO.NAYE" "SAMBORNSiPOSSSTHRa"
"RBD|X|RBD|C|92173~GJHGX4.NAYE" "SAMBORNSiPOSSSTHRa"
"RBD|X|RBD|C|92173~GJHGX6.NAYE" "SAMBORNSiPOSSSTHRa"
"RBD|X|RBD|C|92173~GJHGX8.NAYE" "SAMBORNSiPOSSSTHRa"
"RBD|X|RBD|C|92173~GJHGXA.NAYE" "SAMBORNSiPOSSSTHRa"
"RBD|X|RBD|C|92173~GJHGXC.NAYE" "SAMBORNSiPOSSSTHRa"
</textarea>

<script>

var splitWords = document.getElementById("texto").value.split(/[["\|~]/);
splitWords = document.getElementById("texto").value.split(/[["\|~]/)
//document.write(splitWords.toString()); 

uniqueWords = _.uniq(splitWords);
console.log(uniqueWords);
var index = uniqueWords.indexOf("");
var index2 = uniqueWords.indexOf(" ");
var index3 = uniqueWords.indexOf("\n");
console.log(index3)

var arrayLength = uniqueWords.length;


var removeArray = _.remove(uniqueWords, function (word) {return word === '' || word === ' ' || word === '\n'});
var removeArray2 = _.remove(uniqueWords, function (word) {return _.indexOf(['', ' ', '\n'], word) !== -1});

console.log(removeArray);
console.log(removeArray2);

</script>

对于实现此目的的任何建议,我将不胜感激。

使用 lodash _.remove():

正如@elclanrs 建议您可以使用 filter,但如果您想使用 lodash,您可以这样做:

let v = _.remove(uniqueWords, function (word) {return word !== '' && word !== ' ' && word !== '\n'});

您想 return 数组中 而不是 您要删除的项目。你在做相反的事情。

演示

let uniqueWords = ['a', 'bravo', '', 'c', ' ', '\n', 'delta', 123];
let removeArray = _.remove(uniqueWords, function(word) {
  return word !== '' && word !== ' ' && word !== '\n'
});
console.log(removeArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js"></script>


使用filter():

您实际上不需要使用 lodash 来获得您想要的结果。改用Array.prototype的filter()方法:

let uniqueWords = ['a', 'bravo', '', 'c', ' ', '\n', 'delta', 123];
let removeWords = uniqueWords.filter(function(item) {
  return ['', ' ', '\n'].indexOf(item) < 0 ? item : null;
});
console.log(removeWords);

  1. 首先,将您的过滤器列表置于更具可扩展性的数据格式中,例如一个数组。
  2. 然后编写一个函数来循环遍历我们要过滤的数组和包含我们过滤列表的数组。

像这样:

var badList = ['c', 'd'];
var myArray = ['a', 'b', 'c', 'd'];

var removeFromList = function(badlist, arrayToBeFiltered) {
    var arrayLength = arrayToBeFiltered.length;
    var badArrayLength = badlist.length;

    // let's loop through our array that we want to filter
    for (var p = 0; p < arrayLength; p++) {

        // let's loop through our "bad list"
        for (var i = 0; i < badArrayLength; i++) {
            var index = arrayToBeFiltered.indexOf(badList[i]);

            if (index > -1) {
                arrayToBeFiltered.splice(index, 1);
            }           
        }

    }

    return arrayToBeFiltered;
}

// should return ["a", "b"]
console.log(removeFromList(badList, myArray));

Fiddle

Javascript's Splice