Bastante nuevo en JavaScript, solo intento eliminar una matriz completa dentro de mis datos si ciertos valores se enumeran en la matriz del_values .
¿Cuál sería el mejor enfoque para este problema?
data = [['true', 'visiting-today', 'DVM-Wiessman','J-001'], ['false', 'visiting-tommorrow', 'DVM-Stevens','K-001'], ['true', 'visiting-tommorrow', 'DVM-Stevens','Z-001'], ['false', 'visiting-tommorrow', 'DVM-Kon','J-001']] var del_values = ['J-001','K-001']; function remove_from_list(list,deleted_values) { for( var i = 0; i < deleted_values.length; i++) { result = list.filter(dat => !dat.includes(deleted_values[i])); } return result; }Resultado actual
data = [ [ 'true', 'visiting-today', 'DVM-Wiessman', 'J-001' ], [ 'true', 'visiting-tommorrow', 'DVM-Stevens', 'Z-001' ], [ 'false', 'visiting-tommorrow', 'DVM-Kon', 'J-001' ] ] Resultado deseado: para eliminar una matriz completa dentro de los datos si contiene alguno de los valores enumerados en del_values
data = [[ 'true', 'visiting-tommorrow', 'DVM-Stevens', 'Z-001' ] ]Puede usar Array.prototype.every dentro de la devolución de llamada del filtro:
const data = [ ['true', 'visiting-today', 'DVM-Wiessman', 'J-001'], ['false', 'visiting-tommorrow', 'DVM-Stevens', 'K-001'], ['true', 'visiting-tommorrow', 'DVM-Stevens', 'Z-001'], ['false', 'visiting-tommorrow', 'DVM-Kon', 'J-001'] ] const del_values = ['J-001', 'K-001']; function remove_from_list(list, deleted_values) { return list.filter(arr => arr.every(el => !deleted_values.includes(el))) } console.log(remove_from_list(data, del_values)) function remove_from_list(list,deleted_values) { for( var i = 0; i < deleted_values.length; i++) { result = list.filter(dat => !dat.includes(deleted_value[i])); } return result; } El problema principal en su código es que cada list de iteraciones se filtra, por lo que la matriz previamente filtrada se reasigna.
Usando Array.some() y Array.filter()
var data = [['true', 'visiting-today', 'DVM-Wiessman','J-001'], ['false', 'visiting-tommorrow', 'DVM-Stevens','K-001'], ['true', 'visiting-tommorrow', 'DVM-Stevens','Z-001'], ['false', 'visiting-tommorrow', 'DVM-Kon','J-001']] var del_values = ['J-001','K-001']; var result = data.filter(function(arr){ return !arr.some(function(e){return del_values.includes(e)}); }) console.log(result)Está ejecutando su filtro a través de la list en lugar del result cada vez.
Creo que tenía la intención de continuar trabajando en la lista filtrada en lugar del argumento nuevamente con cada iteración:
data = [['true', 'visiting-today', 'DVM-Wiessman','J-001'], ['false', 'visiting-tommorrow', 'DVM-Stevens','K-001'], ['true', 'visiting-tommorrow', 'DVM-Stevens','Z-001'], ['false', 'visiting-tommorrow', 'DVM-Kon','J-001']] var del_values = ['J-001','K-001']; function remove_from_list(list,deleted_values) { for( var i = 0; i < deleted_values.length; i++) { list = list.filter(dat => !dat.includes(deleted_values[i])); } return list; } let e = remove_from_list(data,del_values); console.log(e);