Traté de filtrar un objeto JS que incluye una matriz. Quiero verificar si la id , el matchcode de coincidencia y description . Eso fue lo que intenté fue eso:
let search = articles.filter(function(item){ return (item.matchcode.includes(articleno) || item.description.includes(articleno) || item.id.includes(articleno)) })Ese es el objeto:
let articles = '[ { "id": "35", "matchcode": "KM Anteile S", "description": "KM Anteile S ", "unit": "STK", "salesPrice": 0.7, "stock": "HL-F", "stockAmount": -3282 }, { "id": "41", "matchcode": "Arbeitszeit", "description": "Arbeitszeit ", "unit": "STD", "salesPrice": 76.8, "stock": "HL-F", "stockAmount": 0.75 }, { "id": "502019", "matchcode": "Gummimuffe 100 mm", "description": "Gummimuffe 100 mm ", "unit": "STK", "salesPrice": 9.8, "stock": "HL-F", "stockAmount": 15 }'; Cuando lo probé, me sale el error, ese filter no es una función.
let articles = [ { "id": "35", "matchcode": "KM Anteile S", "description": "KM Anteile S ", "unit": "STK", "salesPrice": 0.7, "stock": "HL-F", "stockAmount": -3282 }, { "id": "41", "matchcode": "Arbeitszeit", "description": "Arbeitszeit ", "unit": "STD", "salesPrice": 76.8, "stock": "HL-F", "stockAmount": 0.75 }, { "id": "502019", "matchcode": "Gummimuffe 100 mm", "description": "Gummimuffe 100 mm ", "unit": "STK", "salesPrice": 9.8, "stock": "HL-F", "stockAmount": 15 }]; let articleno = "Gummimuffe" let search = articles.filter(function(item){ return (item.matchcode.includes(articleno) || item.description.includes(articleno) || item.id.includes(articleno)) }) console.log(search)Este es un ejemplo de muestra, que también puede aplicar a su código.
let arr = JSON.parse('[{"value":"This is object insided array"}]'); console.log(arr)Debe cerrar su [ con ] y tiene una cadena, no una matriz de objetos. También puede usar JSON.parse() . Esto haría el trabajo:
let articles = [{ "id": "35", "matchcode": "KM Anteile S", "description": "KM Anteile S ", "unit": "STK", "salesPrice": 0.7, "stock": "HL-F", "stockAmount": -3282 }, { "id": "41", "matchcode": "Arbeitszeit", "description": "Arbeitszeit ", "unit": "STD", "salesPrice": 76.8, "stock": "HL-F", "stockAmount": 0.75 }, { "id": "502019", "matchcode": "Gummimuffe 100 mm", "description": "Gummimuffe 100 mm ", "unit": "STK", "salesPrice": 9.8, "stock": "HL-F", "stockAmount": 15 } ]; Lo adicional es que .filter() devuelve una nueva matriz mientras mantiene la original tal como está.
Debido a articles es una cadena, necesita analizarla usando JSON.parse() ,
Nota: como @Dai mencionó en el comentario de esta pregunta, include includes() distingue entre mayúsculas y minúsculas, por lo que es posible que desee utilizar otro enfoque para tener una búsqueda amigable (sin distinción entre mayúsculas y minúsculas)
Elegí usar new RegExp() y en lugar de includes() usé match()
const articles = `[ { "id": "35", "matchcode": "KM Anteile S", "description": "KM Anteile S ", "unit": "STK", "salesPrice": 0.7, "stock": "HL-F", "stockAmount": -3282 }, { "id": "41", "matchcode": "Arbeitszeit", "description": "Arbeitszeit ", "unit": "STD", "salesPrice": 76.8, "stock": "HL-F", "stockAmount": 0.75 }, { "id": "502019", "matchcode": "Gummimuffe 100 mm", "description": "Gummimuffe 100 mm ", "unit": "STK", "salesPrice": 9.8, "stock": "HL-F", "stockAmount": 15 }] `; const articlenenoFilter = "arbeitsze" const articleneno = new RegExp(articlenenoFilter, "i") const search = JSON.parse(articles).filter((item) => (item.matchcode.match(articleneno) || item.description.match(articleneno) || item.id.match(articleneno))) console.log(search)