Quiero tomar un JSON como entrada y producir 2 matrices, una contiene solo claves y la otra contiene solo valor. Pero si una clave y un valor son numéricamente iguales, ese par no tendrá lugar en estas matrices. ¿Cómo puedo solucionar eso?
Puede iterar sobre la key,values de un objeto utilizando Object.entries y luego verificar si la clave y el valor son diferentes, colóquelos en la matriz relacionada. como esto:
let obj = {a:5, b:6, c:3, '1':4,'2':2}; let keys = [] , values = []; Object.entries(obj).forEach(([key,value])=> { if(key != value){ keys.push(key); values.push(value) } }); console.log('keys:',keys); console.log('values:', values);Si entiendo, lo que está preguntando, hay dos funciones integradas, que le brindan las claves y los datos están separados, sin necesidad de bucles.
Object.values devuelve todos los valores de un objeto ( mdn docs )Object.keys devuelve todas las claves de un objeto ( mdn docs )Funciona con objetos y matrices:
var data = {a:1, b:2, c:3, '1':5,'2':'a'}; // just to visualisze the input data console.info('data-object:', JSON.stringify(data)); // extracted keys console.info('keys:', Object.keys(data)); // extracted values console.info('values:', Object.values(data)); var list = [1,2,3,4]; // just to visualisze the input data console.info('data-list:', JSON.stringify(list)); // extracted keys console.info('keys:', Object.keys(list)); // extracted values console.info('values:', Object.values(list)); var data2 = {"1":1, "2":2}; // just to visualisze the input data console.info('data-list:', JSON.stringify(data2)); // extracted keys console.info('keys:', Object.keys(data2)); // extracted values console.info('values:', Object.values(data2));