[英]How to remove object from an array?
我有这个数组,我不得不将对象推入数组。 但是现在,我试图摆脱“卡伦”的整个对象。 底部的for循环是我尝试过的方法,但似乎不起作用。
var employees = [];
var tyler = {
name: 'Tyler',
position: 'Lead Instructor/Engineer',
spiritAnimal: 'Honey Badger'
};
var cahlan = {
name: 'Cahlan',
position: 'CEO',
spiritAnimal: 'butterfly'
};
var ryan = {
name: 'Ryan',
position: 'Marketing',
spiritAnimal: 'fox'
};
var colt = {
name: 'Colt',
position: 'Everything really',
spiritAnimal: 'Young Male Horse'
};
employees.push("tyler", "cahlan", "ryan", "colt");
for (var i = 0; i < employees.length; i++) {
if (employees[i].name === "Cahlan") {
employees.splice(i);
}
}
var employees = []; employees.push("tyler", "cahlan", "ryan", "colt"); for (var i = 0; i < employees.length; i++) { if (employees[i] === "cahlan") { employees.splice(i, 1); break; } } console.log(employees)
两件事情:
Cahlan
进行比较。 name
不存在。 可能您没有意识到,但没有添加已初始化的对象,因此正在使用Strings初始化数组。
您的解决方案正在朝着正确的方向发展,但您犯了两个错误。
首先
employees.push("tyler", "cahlan", "ryan", "colt");
不会按预期将对象推入数组。 它将字符串推送到仅包含对象变量名的employees
中。 JavaScript不知道您要引用这些对象。 它认为您只是在创建一些文本。 为了正确起见,请删除双引号:
employees.push(tyler, cahlan, ryan, colt);
您始终可以通过将其打印到控制台来检查数组的内容:
console.log(employees);
其次,您需要将第二个参数传递给splice
,该参数告诉它要从数组中删除多少个项目。 由于您只想删除一项,因此请执行以下操作:
employees.splice(i, 1);
完整解决方案:
var employees = []; var tyler = { name: 'Tyler', position: 'Lead Instructor/Engineer', spiritAnimal: 'Honey Badger' }; var cahlan = { name: 'Cahlan', position: 'CEO', spiritAnimal: 'butterfly' }; var ryan = { name: 'Ryan', position: 'Marketing', spiritAnimal: 'fox' }; var colt = { name: 'Colt', position: 'Everything really', spiritAnimal: 'Young Male Horse' }; employees.push(tyler, cahlan, ryan, colt); // 1.) remove double quotes console.log(employees); // print array to console to check if array is setup right for (var i = 0; i < employees.length; i++) { if (employees[i].name === "Cahlan") { employees.splice(i, 1); // 2.) add second paramter } } console.log(employees); // print array again to see if removing worked
普通的javascript:
var ret = [];
for (var i = 0; i < employees.length; i++) {
if (employees[i].name !== "Cahlan") ret.push(employees[i]);
}
//ret has the employees with Cahlan removed.
使用jQuery:
employees = $.grep(employees, function(a)) {
return a.name !== "Cahlan";
});
而且,您应该先进行更多搜索。 请参阅使用JavaScript从数组中删除对象
我只是以为我可以教你如何通过正确地处理物体来钓鱼
var employees = [
{
name: 'Tyler',
position: 'Lead Instructor/Engineer',
spiritAnimal: 'Honey Badger'
},
{
name: 'Tyler',
position: 'Lead Instructor/Engineer',
spiritAnimal: 'Honey Badger'
},
{
name: 'Cahlan',
position: 'CEO',
spiritAnimal: 'butterfly'
},
{
name: 'Ryan',
position: 'Marketing',
spiritAnimal: 'fox'
},
{
name: 'Colt',
position: 'Everything really',
spiritAnimal: 'Young Male Horse'
}];
var obj = Object.assign({}, tyler, cahlan, ryan, colt);
等于上面的完整对象,
现在,有几种方法可以从阵列中删除对象,有些方法是删除,如您正确建议的那样,跳过循环。
你可以尝试lodash _.omit, _.concat
等给你带来麻烦
//1
employees.shift(); // first element removed
//2
employees= employees.slice(1); // first element removed
//3
employees.splice(0,1); // first element removed
//4
employees.pop(); // last element removed
// 5 return everything but Cahlan
employees.filter(function(arr) { return arr.name !== "Cahlan"; });
// 5 return only Cahlan
employees.filter(function(arr) { return arr.name === "Cahlan"; });
首先,使用
employees.push(tyler,cahlan,ryan,colt)
没有" "
然后....
employYouWant = employees.filter( (employ) => employ.name === 'Cahlan')///{name: 'Cahlan', position: 'CEO', spiritAnimal: 'butterfly'};
""
是字符串, {}
是对象文字
因此, employees.push("tyler", "cahlan", "ryan", "colt");
在推…♪弦。
解决此问题后-推送实际的对象文字:
employees.push(tyler, cahlan, ryan, colt);
您终于可以访问对象的.name
属性。
比你可以.filter()你的数组:
var employees = []; var tyler = { name: 'Tyler', position: 'Lead Instructor/Engineer', spiritAnimal: 'Honey Badger' }; var cahlan = { name: 'Cahlan', position: 'CEO', spiritAnimal: 'butterfly' }; var ryan = { name: 'Ryan', position: 'Marketing', spiritAnimal: 'fox' }; var colt = { name: 'Colt', position: 'Everything really', spiritAnimal: 'Young Male Horse' }; employees.push(tyler, cahlan, ryan, colt); // Push your actual Object literals employees = employees.filter( obj => obj.name !== "Cahlan" ); console.log( employees )
请参阅此功能更强大的方法来过滤阵列。 您可以通过使用助手功能来管理员工数组的方式相同:
let employees = []; const addEmployee = (name, position, spiritAnimal) => employees.push({name, position, spiritAnimal}); const removeEmployee = (name) => employees = employees.filter( obj => obj.name !== name ); // Let's add some to Array addEmployee('Tyler', 'Lead Instructor/Engineer', 'Honey Badger'); addEmployee('Cahlan', 'CEO', 'butterfly'); addEmployee('Ryan', 'Marketing', 'fox'); addEmployee('Colt', 'Everything really', 'Young Male Horse'); // Let's remove some from Array removeEmployee('Cahlan'); removeEmployee('Colt'); console.log( employees );
或者,您也可以采用更通用的原型或Class -y方式重写上述内容,并且与数组无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.