Quiero seleccionar los primeros 2 elementos de una matriz y también seleccionar solo el nombre de cada persona de un objeto, no el nombre completo.
Estos son mis códigos:
índice.html
<body> <button onclick="loadajax();">laod ajax</button> <div id = "update"></div> <script src="jquery.js"></script> <script src="script.js"></script> </body>guión.js
function loadajax(){ var request; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } else { request = new ActiveXObject("Microsoft.XMLHTTP"); } request.open('GET', 'data.json'); request.onreadystatechange = function() { if ((request.readyState===4) && (request.status===200)) { var items = JSON.parse(request.responseText); var output = '<ul>'; for (var key in items) { output += '<li>his name is:' + items[key].name + ' with the id of:'+ items[key].id +'</li>'; } output += '</ul>'; document.getElementById('update').innerHTML = output; } } request.send(); }datos.json
[ { "name":"Barot Bellingham", "id":"1" }, { "name":"alex benjan", "id":"2" }, { "name":"jony lekson", "id":"3" } ]estos son los resultados:
pero lo que quiero es esto:
¿tienes una idea de cómo hacer esto?
Puedes usar slice :
for (let key in items.slice(0, 2)) { // ...etc Pero, en general, se recomienda no usar for...in en arreglos. Use for..of (o forEach ), en combinación con la desestructuración y un literal de plantilla:
for (let {name, id} of items.slice(0, 2)) { output += `<li>his name is: ${name} with the id of: ${id}</li>` } O, mejor aún, usa map en combinación con join :
let output = '<ul>' + items.slice(0, 2).map(({name, id}) => `<li>his name is: ${name} with the id of: ${id}</li>` ).join('') + '</ul>'; El primer nombre se puede extraer tomando la primera palabra con split (esto no es 100% correcto, ya que algunos nombres pueden constar de dos o más palabras):
let output = '<ul>' + items.slice(0, 2).map(item => `<li>his name is: ${item.name.split(' ')[0]} with the id of: ${id}</li>` ).join('') + '</ul>';NB: Esto tiene poco que ver con Ajax o JSON, solo con los métodos de bucle y matriz.
Otro enfoque que devuelve una matriz:
var jsonArray = [ { "name":"Barot Bellingham", "id":"1" }, { "name":"alex benjan", "id":"2" }, { "name":"jony lekson", "id":"3" } ]; var user = jsonArray .map((user, index) => { return { 'id': user.id, 'name' : user.name.split(' ')[0] }; }).slice(0, 2) salida: // [{"id":"1","name":"Barot"},{"id":"2","name":"alex"}]
generalmente para obtener 2 primeros elementos de la matriz:
const items = [1, 2, 3]; const [first, second] = items; // 1, 2En tu caso sería así:
const [first, second] = items.map(({name, id}) => ({firstName: name.split(' ')[0], id}));