Tengo un archivo JSON que tiene una matriz de objetos con datos dentro:
[ { "_id": "62bd5fba34a8f1c90303055c", "index": 0, "email": "mcdonaldholden@xerex.com", "nameList": [ { "id": 0, "name": "Wendi Mooney" }, { "id": 2, "name": "Holloway Whitehead" } ] }, { "_id": "62bd5fbac3e5a4fca5e85e81", "index": 1, "nameList": [ { "id": 0, "name": "Janine Barrett" }, { "id": 1, "name": "Odonnell Savage" }, { "id": 2, "name": "Patty Owen" } ] }, ... Mi trabajo es filtrar los arreglos que tienen más de dos nombres y si sus id son consecutivos. Me las arreglé para clasificar a los usuarios con más de dos user.name de usuario, pero no puedo entender el concepto de filtrar números de identificación consecutivos
let lister3 = userData.filter(names => names?.nameList?.filter(name => name?.name).length > 2)Lo cual me devuelve los objetos con más de dos nombres de usuario.
El filter toma una función que devuelve true si desea conservar el elemento o false si no. En esta función, puede verificar la longitud de nameList y luego iterar sobre sus miembros y asegurarse de que sus id sean consecutivos:
retult = userData.filter(u => { if (u.nameList.length < 2) { return false; } for (let i = 1; i < u.nameList.length; ++i) { if (u.nameList[i].id != u.nameList[i - 1].id + 1) { return false; } } return true; });un artículo debe necesitar dos condiciones, uno es la longitud de la lista de nombres es dos, el otro es el identificador del artículo de la lista de nombres es consecutivo; así que primero como lo haces:
` let lister3 = userData.filter(names => names?.nameList?.filter(name => name?.name).length > 2) `; entonces `
let lister4 = lister3.filter(names=>{ let idOfStr = names.nameList?.sort((a,b)=>a.id-b.id).map(item=>item.id).join(""); let resultStr = Array.from(idOfStr.length).fill(+idOfStr[0]).map((item,index)=>+item+index).join(''); return idOfStr === resultStr })`
espero que esto sea útil para ti