Удалить элемент массива из вложенного массива с помощью Lodash - PullRequest
4 голосов
/ 11 июля 2019

Требуется удалить элемент массива из вложенного массива, если массив подмножеств имеет значение null или 0 (ноль) с использованием lodash. Я пробовал фильтр, но я ищу лучший способ с точки зрения производительности.

const arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"]];
console.log("arr", arr);
// output should be [["a","b","c"],["d","e","f"]]

Ответы [ 4 ]

4 голосов
/ 11 июля 2019

Вы можете использовать filter() и some()

const arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"]];

let res = arr.filter(x => !x.some(a => a === null || a === 0))
console.log(res)
2 голосов
/ 11 июля 2019
  • С lodash: filter и includes функциями:

const arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"]];
const result = _.filter(arr, x => !_.includes(x, null) && !_.includes(x, 0))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.14/lodash.min.js"></script>
  • С ES6: filter и some функциями:

const arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"]];
const result = arr.filter( x => !x.some(s => s === null || s === 0))
console.log(result)
  • С ES6: reduce:

const arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"]];
const result = arr.reduce( (acc, c) => {
  if(c.some(x => x === null || x === 0)) {
    return acc
  }
  return [...acc, c]
},[])

console.log(result)
0 голосов
/ 11 июля 2019

//cost will not let modify the variable
let arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"]];


arr  = arr.filter(aItem=>{
   //compact will remove null, 0 , undefined values from array item
   return aItem.length===_.compact(aItem).length;
});

console.log("...arr",arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.14/lodash.core.min.js"></script>
0 голосов
/ 11 июля 2019

Вы можете попробовать с filter() и some().

Обратите внимание: Следующее решение также будет работать для других ложь вводы типа "" и undefined.

Использование Lodash :

const arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"],["d",undefined,"f"],["d","e","f",""]];
var res = _.filter(arr, a => !a.some(i => !i));
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.14/lodash.core.min.js" integrity="sha256-NAQPwApfC7Ky1Y54LjXf7UrUQFbkmBEPFh/7F7Zbew4=" crossorigin="anonymous"></script>

Использование Vanilla JS :

const arr = [["a","b","c"],["f","r","p",0],["r",22,null,"t"],["d","e","f"],["d",undefined,"f"],["d","e","f",""]];
var res = arr.filter(a => !a.some(i => !i));
console.log(res);
...