1

Tengo un arreglo de objetos y quiero obtener [152,153,154,155,156,157] que son los valores para la propiedad intento de cada objeto. Lo obtendría recorriendo con for, pero quiero saber si existe una función para hacerlo mas fácil.

let arr= [{intento: 152, tipo: "intruso"},
 {intento: 153, tipo: "intruso"},
 {intento: 154, tipo: "intruso"},
 {intento: 155, tipo: "intruso"},
 {intento: 156, tipo: "intruso"},
 {intento: 157, tipo: "intruso"}]
 
 let copy=[];
 for(let i=0; i<arr.length; i++){
 copy.push(arr[i].intento);
 }
 console.log(copy);
Pikoh
  • 17,305
  • 9
  • 38
  • 54
hubman
  • 2,624
  • 9
  • 35
  • 75
  • para que la pregunta sea mejor recibida por la comunidad puedes agregar el for que realizarías? y de ahi nosotros te proponemos una respuesta –  Nov 22 '18 at 14:59
  • @shadow listo he editado mi pregunta – hubman Nov 22 '18 at 15:02
  • 4
    Eso no es un *objeto JSON* [JSON!= objeto JS](https://es.stackoverflow.com/questions/164943/cu%C3%A1l-es-la-diferencia-entre-json-y-un-objeto-en-javascript) – Pablo Lozano Nov 22 '18 at 15:34

4 Answers4

6

Hay una manera más elegante de conseguirlo, pero creo que no es mucho más eficiente que el for. De todos modos te pongo la propuesta:

let arr= [{intento: 152, tipo: "intruso"},
 {intento: 153, tipo: "intruso"},
 {intento: 154, tipo: "intruso"},
 {intento: 155, tipo: "intruso"},
 {intento: 156, tipo: "intruso"},
 {intento: 157, tipo: "intruso"}]
 let resultado = arr.map(a => a.intento)
console.log(resultado);

Como ves en una sola línea obtienes el mismo resultado que el for, pero no se si es más rápido o no.

JackNavaRow
  • 6,836
  • 5
  • 22
  • 49
3

Si utilizas jQuery puedes hacerlo utilizando "map", sino creo que un ciclo for sería lo mejor.

let arr = [
 {intento: 152, tipo: "intruso"},
 {intento: 153, tipo: "intruso"},
 {intento: 154, tipo: "intruso"},
 {intento: 155, tipo: "intruso"},
 {intento: 156, tipo: "intruso"},
 {intento: 157, tipo: "intruso"}]
 
var res = $.map(arr, function( val, i ) { return val.intento; });

console.log(res);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

¡Suerte!

Gustavo Cantero
  • 1,972
  • 1
  • 7
  • 13
2

Realizalo a través de un forEach() de este modo

let data =[{intento: 152, tipo: "intruso"},
 {intento: 153, tipo: "intruso"},
 {intento: 154, tipo: "intruso"},
 {intento: 155, tipo: "intruso"},
 {intento: 156, tipo: "intruso"},
 {intento: 157, tipo: "intruso"}]


data.forEach((element, index) => {
  console.log(element["intento"])
})

Simplemente necesitarás indicarle a la función que va por dentro 2 argumentos: element e index después en el console.log() le indicas que solo quieres el valor en intento de este modo element["nombredelaclave"]

A la larga forEach termina siendo mas rápido que map y de hecho este último te genera un arreglo nuevo partiendo del antes creado y creo eso no es lo que necesitas

0

Y ya por poner otra opción... Pongo el for of de ES6

let arr= [{intento: 152, tipo: "intruso"},
 {intento: 153, tipo: "intruso"},
 {intento: 154, tipo: "intruso"},
 {intento: 155, tipo: "intruso"},
 {intento: 156, tipo: "intruso"},
 {intento: 157, tipo: "intruso"}]
 
let copy = [];
 
for (let item of arr) {
   copy.push(item.intento);
}

console.log(copy);
Kiko_L
  • 6,455
  • 1
  • 11
  • 25