简体   繁体   中英

Remove an array item from Nested array using Lodash

Looking to remove an array item from the nested array if subset array have value a null or 0(zero) using lodash. I tried filter but I am looking for best way in term of performance.

 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"]] 

You can use filter() and 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) 

  • With lodash : filter and includes functions:

 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> 

  • With ES6 : filter and some functions:

 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) 

  • With 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) 

You can try with filter() and some() .

Please Note: The following solution will also work for other falsy inputs like "" and undefined .

Using 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> 

Using 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); 

 //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> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM