Knockout: eliminar elemento de matriz por valor de campo específico

Quiero eliminar el elemento de matriz observable ko por valor de campo específico. Probé una solución. Pero, hay algo que falta. No funciona.

customOptionVal : ko.observableArray([]) 

customOptionVal es ko observableArray y la salida de eso es:

 Color: [0: {sub_color: "Red", sub_id: "options_3_2", is_checked: true} 1: {sub_color: "Green + $250.00", sub_id: "options_3_3", is_checked: true}] Size: {sub_size: "L", sub_id: "options_2_2", is_checked: true} 

Ahora, quiero eso si sub_id = options_3_2 entonces, se eliminará del elemento Color en la base de sub_id .

He intentado esto por debajo de la solución. Pero, no está funcionando:

 $.each(self.customOptionVal()['Color'], function( key, val ) { if(self.customOptionVal()['Color'][key].sub_id == 'options_3_2') { self.customOptionVal.remove(self.customOptionVal()['Color'][key]); } }); 

introduzca la descripción de la imagen aquí

2 Solutions collect form web for “Knockout: eliminar elemento de matriz por valor de campo específico”

El siguiente fragmento de customOptionVal observableArray elimina del propio customOptionVal observableArray :

 self.customOptionVal.remove(function(option) { return ko.utils.arrayFilter(option.Color, function(color) { return color.sub_id === subId; }); }); 

Sin embargo, si solo desea eliminar de la matriz de Color (que no es una matriz observableArray ), use el siguiente fragmento de código:

 self.customOptionVal().forEach(function(option) { var index = option["Color"].findIndex(function(y) { return y.sub_id === subId; }); if (index > -1) { option["Color"].splice(index, 1); } }); 

Violín

Encontré mejor manera que

Como se ve en la captura de pantalla, cree una matriz observable ko y establezca el valor de Color en esa ko.observableArray

 custom_option_select_text_arr = ko.observableArray([]) ..... this.custom_option_select_text_arr.push({sub_color: "Red", sub_id: "options_3_2", is_checked: true}); this.customOptionVal()['Color'] = this.custom_option_select_text_arr(); 

Ahora, para eliminar elemento:

 self.custom_option_select_text_arr.remove(self.custom_option_select_text_arr()[0]); self.customOptionVal()['Color'] = this.custom_option_select_text_arr(); 
  • Patrón de module de Revelación de Javascript: exposition de las variables de initialization después de que la function ha regresado
  • Agregar filas de categoría basadas en properties de elementos coincidentes
  • Caracteres especiales en el model de datos definitivos
  • Knockout: enlaces de clic y marcados en un elemento
  • carga de files usando knockout js
  • Knockout.js - xxxx no es una function
  • KnockoutJS - Rebinding ViewModel
  • No puedo hacer que mi data binding con knockoutJS funcione
  • Pasar parámetro usando onclick o un enlace de clic con KnockoutJS
  • Knockout: descubre cuál es el disparador observable computado
  • Cómo crear un proyecto básico de TypeScript usando jQuery, RequireJS y KnockoutJS
  • Plantilla recursiva con js knockout
  • Convierta ko.toJSON de nuevo en una matriz observable
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.