Tengo una matriz de objetos donde algunas claves devuelven un valor vacío. Cuando aparece un valor vacío, me gustaría devolver esa clave como una cadena.
Por ejemplo esta matriz:
'products': [{ 'name': 'Test product', 'id': '', 'price': '', 'brand': 'AwesomeBrand', 'colour': 'Gray', 'quantity': 1 }, { 'name': '', 'id': '123', 'price': '', 'brand': 'AwesomeBrand', 'colour': 'Black', 'quantity': 1 }]En el ejemplo anterior, quiero devolver lo siguiente:
'id, price, name'He intentado lo siguiente que hace el trabajo. Sin embargo, todavía regresa como una matriz. Luego, JSON.strigify, pero eso devuelve una cadena fea. Intenté reemplazarlo/limpiarlo RegEx, sin embargo, el programa que estoy usando usa una versión de JavaScript en espacio aislado, por lo que no se puede acceder a algunas funciones.
Estoy luchando por comprender el concepto de acceder a claves y valores en una matriz de objetos. Así que eso es parte de mi problema.
var productArray = ecomValues || []; var emptyArray = []; var output = productArray.reduce(function (previousValue, currentValue, currentIndex) { var keys = Object.keys(currentValue).filter(function (key) { return !currentValue[key];/ }); if (keys.length) { previousValue[currentIndex] = keys; } return previousValue; }, {}); var emptyValues = output; emptyArray.push(emptyValues);¿Alguien que me pueda ayudar con mi problema?
Puede iterar la matriz y obtener las claves y agregar las claves si se encuentra un valor falso.
const products = [{ name: 'Test product', id: '', price: '', brand: 'AwesomeBrand', colour: 'Gray', quantity: 1 }, { name: '', id: '123', price: '', brand: 'AwesomeBrand', colour: 'Black', quantity: 1 }], empty = Array.from(products.reduce((s, o) => { Object.keys(o).forEach(k => { if (o[k] === '') s.add(k); }); return s; }, new Set)); console.log(empty.join(', ')); Una solución sin Set .
const products = [{ name: 'Test product', id: '', price: '', brand: 'AwesomeBrand', colour: 'Gray', quantity: 1 }, { name: '', id: '123', price: '', brand: 'AwesomeBrand', colour: 'Black', quantity: 1 }], empty = Array.from(products.reduce((r, o) => { Object.keys(o).forEach(k => { if (o[k] === '' && !r.includes(k)) r.push(k); }); return r; }, [])); console.log(empty.join(', '));Podemos usar reduce() para crear una matriz con todas las claves que están vacías
Para encontrar las teclas vacías, podemos usar esto como ejemplo .
Y join() la matriz a una cadena
const data = {'products': [{'name': 'Test product', 'id': '', 'price': '', 'brand': 'AwesomeBrand', 'colour': 'Gray', 'quantity': 1 }, {'name': '', 'id': '123', 'price': '', 'brand': 'AwesomeBrand', 'colour': 'Black', 'quantity': 1 }]}; const emptyKeys = data.products.reduce((prev, cur) => [ ...prev, ...Object.keys(cur).filter((key) => !cur[key]) ], []) .filter((v, i, a) => a.indexOf(v) === i) .join(', '); console.log(emptyKeys); id, price, nameItere products con Array.flatMap() , filtre todas las claves con valores que no estén vacíos y luego haga que la matriz sea única mediante el uso de un Set y se extienda a una matriz:
const products = [{ name: 'Test product', id: '', price: '', brand: 'AwesomeBrand', colour: 'Gray', quantity: 1 }, { name: '', id: '123', price: '', brand: 'AwesomeBrand', colour: 'Black', quantity: 1 }] const result = [...new Set(products.flatMap( obj => Object.keys(obj) .filter(key => obj[key] === '') ))] console.log(result);