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(); 
  • Crear componentes reutilizables con KnockoutJS
  • Los enlaces knockout se desvinculan después de la historia
  • Activar una function cuando un elemento se habilita / deshabilita
  • Knockout.js modifica el valor antes de escribir ko.observable ()
  • bloquea sammy.js de robar 'enlaces reales'
  • estilo de fila alternativa con $ index binding
  • knockoutjs afterRender function en foreach binding
  • input de número de enmascaramiento jquery
  • ¿Cómo puedo usar la interpolación variable en attributes de HTML (Knockout.js)?
  • Comprobación de error del grupo de validation Knockout
  • Entrada de Knockout.js escribe el data binding de date en Google Chrome
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.