Nuestros mejores programadores han agotado sus provisiones de café, investigando noche y día por la resolución, hasta que Isabella halló la respuesta en GitHub y hoy la compartimos con nosotros.
Solución:
Nadie mencionó Object.entries() todavía, que podría ser la forma más flexible de hacerlo. Este método utiliza el mismo orden que for..in
al enumerar propiedades, es decir, el orden en que las propiedades se ingresaron originalmente en el objeto. También obtiene subarreglos con propiedad y valor para que pueda usar cualquiera o ambos. Finalmente, no tiene que preocuparse de que las propiedades sean numéricas o establecer una propiedad de longitud adicional (como lo hace cuando usa Array.prototype.slice.call()
).
Aquí hay un ejemplo:
const obj = 'prop1': 'foo', 'prop2': 'bar', 'prop3': 'baz', 'prop4': 'prop': 'buzz';
Desea dividir los dos primeros valores:
Object.entries(obj).slice(0,2).map(entry => entry[1]);
//["foo", "bar"]
Toda la keys?
Object.entries(obj).slice(0).map(entry => entry[0]);
//["prop1", "prop2", "prop3", "prop4"]
El último key-valor par?
Object.entries(obj).slice(-1)
//[ ['prop4', 'prop': 'buzz'] ]
Puedes reduce
el resultado de Object.keys
función
const myObject =
0: 'zero',
1: 'one',
2: 'two',
3: 'three',
4: 'four'
;
const sliced = Object.keys(myObject).slice(0, 2).reduce((result, key) =>
result[key] = myObject[key];
return result;
, );
console.log(sliced);
Estaba tratando de cortar un objeto usando
Array.prototype
pero devuelve un vacío array
Eso es porque no tiene un .length
propiedad. Intentará acceder a él, obtener undefined
cámbielo a un número, obtenga 0
, y cortar como máximo esa cantidad de propiedades del objeto. Por lo tanto, para lograr el resultado deseado, debe asignarle un length
o iterador a través del objeto manualmente:
var my_object = 0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four';
my_object.length = 5;
console.log(Array.prototype.slice.call(my_object, 4));
var sliced = [];
for (var i=0; i<4; i++)
sliced[i] = my_object[i];
console.log(sliced);