Фильтрация в Javascript - PullRequest
       20

Фильтрация в Javascript

0 голосов
/ 10 мая 2019

У меня есть список из 10 предметов, из которых я должен вынуть 1 предмет. Т.е. если в myItems есть и «Item1», и «item2», тогда я должен извлечь «item2» из «myItems». Есть ли более простой и лучший способ сделать это (без функций стрелок) по сравнению с тем, что я имею ниже.

 function getFilteredItems(myItems) {
           var items = ['item1', 'item2'];             

           var filteredItems = myItems.filter(function (myItem) {
               return items.indexOf(myItem.name) !== -1;
           });

           if (filteredItems && filteredItems.length > 1) {

               myItems = myItems.filter(function (myItem) {
                   return 'item2' !== myItem.name;
               });
           }

           return myItems;
       }

Ответы [ 4 ]

0 голосов
/ 10 мая 2019
function removeDups(items) {
  var newItems = [];

  items.forEach(function(item) { 
    if (!newItems.includes(item)) { 
      return newItems.push(item) 
    } 
  });

  return newItems;
}

Теперь вызовите removeDups со своим массивом элементов

var items = ['a', 'b', 'c', 'a'];
removeDups(items); // ['a', 'b', 'c']

Предполагается, что в вашем списке нет объектов. Если в вашем списке есть объекты, замените условие, если оно соответствует вашим объектам.

0 голосов
/ 10 мая 2019

myitems.filter (item =>! Items.includes (item))

0 голосов
/ 10 мая 2019

Вот что я бы сделал.
Я предпочитаю это, потому что вы можете легко добавлять объекты в items и отфильтровывать их, или иметь полностью динамический

function getFilteredItems(myItems) {
    var items = [{name:'item1'}, {name:'item2'}];
    if( myItems.reduce((c, item) => c += items.map(obj => obj.name).includes(item.name) , 0) == 2 ) { items.shift(); };
    return myItems.filter(item => !items.map(obj => obj.name).includes(item.name) )
}

если items не заполнено объектами

function getFilteredItems(myItems) {
    var items = ['item1', 'item2'];
    if( myItems.reduce((c, item) => c += items.includes(item.name) , 0) == 2 ) { items.shift(); };
    return myItems.filter(item => !items.includes(item.name) )
}

РЕДАКТИРОВАТЬ: без функции стрелок

// items is objects
function getFilteredItems(myItems) {
    var items = [{name:'item1'}, {name:'item2'}];
    if( myItems.reduce(function(c, item) { return c += items.map( function(obj) { return obj.name}).includes(item.name)} , 0) == 2 ) { items.shift(); };
    return myItems.filter( function(item) { return !items.map( function(obj) {return obj.name}).includes(item.name)} )
}


// items is strings
function getFilteredItems(myItems) {
    var items = ['item1', 'item2'];
    if( myItems.reduce(function(c, item){ return c += items.includes(item.name) } , 0) == 2 ) { items.shift(); };
    return myItems.filter( function(item) { return !items.includes(item.name)} )
}
0 голосов
/ 10 мая 2019

Вот простой способ сделать это:

if(myItems.includes("item1") && myItems.includes("item2")){
  myItems.splice(myItems.indexOf("item2"),1);
}

var myItems = ["item1","item2","item3","item4","item5","item6"];
console.log(myItems);
function deleteItem(){
  if(myItems.includes(document.getElementById("itemA").value) && myItems.includes(document.getElementById("itemB").value)){
    myItems.splice(myItems.indexOf(document.getElementById("itemB").value),1);
  }
  console.log(myItems);
}
<input type="text" id="itemA">If this...<br>
<input type="text" id="itemB">and this... delete this<br>
<button onclick="deleteItem();">Delete!</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...