2017-09-28 1 views
0

C'est une question en deux parties que je n'arrive pas à résoudre. La première partie exige que l'objet entier appartenant à 'Theo' soit supprimé d'une manière ou d'une autre. La deuxième partie nécessite que l'objet soit modifié en éditant l'une des valeurs de propriété appartenant à 'Lorie'. Voici le tableau et les instructions:Comment changer plusieurs objets dans un tableau?

var employees = [{ 
    "firstName": "Von", 
    "lastName": "Budibent", 
    "email": "[email protected]", 
    "department": "Sales" 
}, { 
    "firstName": "Catherina", 
    "lastName": "Swalowe", 
    "email": "[email protected]", 
    "department": "Engineering" 
}, { 
    "firstName": "Theo", 
    "lastName": "Trill", 
    "email": "[email protected]", 
    "department": "Services" 
}, { 
    "firstName": "Elsy", 
    "lastName": "McCrorie", 
    "email": "[email protected]", 
    "department": "Legal" 
}, { 
    "firstName": "Lorie", 
    "lastName": "Handsheart", 
    "email": "[email protected]", 
    "department": "Research and Development" 
}] 

/* Create a function called 'employeeUpdater'. employeeUpdater will loop 
over the array above and perform the following: 
    1. If employee's first name is Theo, remove that employee because he just 
got fired. 
    2. If the employee's first name is Lorie, change her department to 'HR'. 
    3. Return the updated employee array. */ 

Tout ce que je dois commencer est la suivante:

var employeeUpdater =() => { 
    for (let i = 0; i < employees.length; i++) { 
    if (employees[i] = 'Theo') { 
     employees.remove(employees[i]); 
    } else if (employees[i] = 'Lorie') { 
     employees.department = 'HR'; 
    } 
    } return employees; 
} 

Quelque chose ne va pas avec le code

+0

La condition 'employés [i] = « Theo''. Cela affectera la valeur, vous avez besoin de '==' ou '===' pour comparer les valeurs. – Tushar

+1

'employees = employees.filter (e => e.firstName! == 'Theo'); employees.find (e => e.firstName === 'Lorie'). Department = 'HR'; '. – Tushar

+1

On dirait des devoirs. – PHPglue

Répondre

1

tableaux Javascript ne sont pas une méthode avec le nom remove , à la place, vous devez utiliser la méthode Array#splice pour supprimer un élément. Mais je peux suggérer cette solution.

Première utilisation Array#filter pour exclure les objets avec le nom Theo puis utilisez Array#map ou Array#forEach itérer sur les tableaux d'un trouver les objets dont le nom avec Lorie et changer son département a.

var employees = [{ 
 
    "firstName": "Von", 
 
    "lastName": "Budibent", 
 
    "email": "[email protected]", 
 
    "department": "Sales" 
 
}, { 
 
    "firstName": "Catherina", 
 
    "lastName": "Swalowe", 
 
    "email": "[email protected]", 
 
    "department": "Engineering" 
 
}, { 
 
    "firstName": "Theo", 
 
    "lastName": "Trill", 
 
    "email": "[email protected]", 
 
    "department": "Services" 
 
}, { 
 
    "firstName": "Elsy", 
 
    "lastName": "McCrorie", 
 
    "email": "[email protected]", 
 
    "department": "Legal" 
 
}, { 
 
    "firstName": "Lorie", 
 
    "lastName": "Handsheart", 
 
    "email": "[email protected]", 
 
    "department": "Research and Development" 
 
}]; 
 

 
var editedEmployees = employees 
 
.filter(emp => emp.firstName !== 'Theo') 
 
.map(emp =>  
 
    ({ 
 
     "firstName": emp.firstName, 
 
     "lastName": emp.lastName, 
 
     "email": emp.email, 
 
     "department": emp.firstName === 'Lorie' ? 'HR' : emp.department 
 
    })); 
 

 
console.log(editedEmployees)

0

vous pouvez le faire avec épissure():

var employeeUpdater =() => { 
    for (let i = 0; i < employees.length; i++) { 
    if (employees[i].firstName == 'Theo') { 
     employees.splice(i, 1); 
     i--; 
    } else if (employees[i].firstName == 'Lorie') { 
     employees[i].department = 'HR'; 
    } 
    } 
}return employees; 
+0

votre opérateur devrait être "===" – Xupitan

0

L'une des choses délicates au sujet du référencement des objets dans des tableaux est que vous devez vous rappeler devez les référencer avec le numéro d'index du tableau, puis le nom de l'objet comme employés [2] .firstName serait comment vous faites référence à Theo. En outre, la méthode d'épissure est la meilleure pour retirer un tableau comme indiqué ci-dessus.

je crois que le code que vous essayez d'écrire ressemblerait à ceci:

var employeeUpdater =() => { 
    for (let i = 0; i < employees.length; i++) { 
    if (employees[i].firstName === 'Theo') { 
     employees.splice(i, 1); 
    } else if (employees[i].firstName === 'Lorie') { 
     employees[i].department = 'HR'; 
    } 
    } return employees; 
} 
0

Vous devriez apprendre à programmer d'une manière orientée objet. Peut-être que cela vous aidera:

//<![CDATA[ 
 
var pre = onload; 
 
onload = function(){ 
 
if(pre)pre(); // change pre var name if using technique on other pages 
 

 
var employees = [{ 
 
    firstName:'Von', 
 
    lastName: 'Budibent', 
 
    email:'[email protected]', 
 
    department:'Sales' 
 
}, { 
 
    firstName:'Catherina', 
 
    lastName:'Swalowe', 
 
    email:'[email protected]', 
 
    department:'Engineering' 
 
}, { 
 
    firstName:'Theo', 
 
    lastName:'Trill', 
 
    email:'[email protected]', 
 
    department:'Services' 
 
}, { 
 
    firstName:'Elsy', 
 
    lastName:'McCrorie', 
 
    email:'[email protected]', 
 
    department:'Legal' 
 
}, { 
 
    firstName:'Lorie', 
 
    lastName:'Handsheart', 
 
    email:'[email protected]', 
 
    department:'Research and Development' 
 
}]; 
 
function EmployeeHandler(employeeArray){ 
 
    this.employees = employeeArray; 
 
    this.removeByFirstName = function(firstName, caseSensitive){ 
 
    var emp = this.employees; 
 
    var rx = caseSensitive ? new RegExp(firstName) : new RegExp(firstName, 'i'); 
 
    for(var i=0,l=emp.length; i<l; i++){ 
 
     if(emp[i].firstName.match(rx)){ 
 
     this.employees.splice(i, 1); 
 
     return this; 
 
     } 
 
    } 
 
    return false; 
 
    } 
 
    this.removeByLastName = function(lastName, caseSensitive){ 
 
    var emp = this.employees; 
 
    var rx = caseSensitive ? new RegExp(lastName) : new RegExp(lastName, 'i'); 
 
    for(var i=0,l=emp.length; i<l; i++){ 
 
     if(emp[i].lastName.match(rx)){ 
 
     this.employees.splice(i, 1); 
 
     return this; 
 
     } 
 
    } 
 
    return false; 
 
    } 
 
    this.getByFirstName = function(firstName, caseSensitive){ 
 
    var emp = this.employees; 
 
    var rx = caseSensitive ? new RegExp(firstName) : new RegExp(firstName, 'i'); 
 
    for(var i=0,l=emp.length,em; i<l; i++){ 
 
     em = emp[i]; 
 
     if(em.firstName.match(rx)){ 
 
     return em; 
 
     } 
 
    } 
 
    return false; 
 
    } 
 
    this.getByLastName = function(lastName, caseSensitive){ 
 
    var emp = this.employees; 
 
    var rx = caseSensitive ? new RegExp(lastName) : new RegExp(lastName, 'i'); 
 
    for(var i=0,l=emp.length,em; i<l; i++){ 
 
     em = emp[i]; 
 
     if(em.lastName.match(rx)){ 
 
     return em; 
 
     } 
 
    } 
 
    return false; 
 
    } 
 
} 
 

 
var eh = new EmployeeHandler(employees); 
 
var bb = eh.removeByFirstName('Theo').getByLastName('Budibent'); 
 
bb.department = 'Intelligent Design'; 
 
console.log(eh.employees); console.log(bb); console.log(eh.employees); 
 

 
} 
 
//]]>

0

Essayez cette

var editedEmployees = employees 
.filter(emp => emp.firstName !== 'Theo') 
.map((emp) => {emp.department = emp.firstName === 'Lorie' ? 'HR' : 
emp.department; return emp;}); 
0

Si vous aimez travailler avec lodash vous pouvez rendre votre code plus facile à lire.

Ainsi, votre script doit être comme ceci:

var _ = require('lodash'); 
/* Remove element */ 
_.remove(employees, function (employee) { return employee.firstName === 'Theo'; }); 
/* Get element to change */ 
var employee = _.find(employees,function (employee) { return employee.firstName === 'Lorie'; }); 
/* Change element */ 
employee.firstName = 'HR'; 
/* Right now employees store the right result */