kyler决定删除他的帐户。循环遍历你的数组 对象直到你找到kyler的帐号 - 使用kyler@test.com在数组中找到他。 找到他所在的特定索引后,将其从数组中删除。
var users = [{
name: 'talon',
email: 'talon@test.com',
password: 'test1234',
username: 'tdog',
},{
name: 'lauren',
email: 'lauren@test.com',
password: 'admin1234',
username: 'ldogg',
},{
name: 'cohen',
email: 'cohen@test.com',
password: 'baby1234',
username: 'cdoggy',
},{
name: 'kyler',
email: 'kyler@test.com',
password: 'delete1234',
username: 'kdawg'
}];
这是我到目前为止所做的,但我正在转动我的车轮:
function deleteUser(arr)
for (var i = 0; i < users.length; i++) {
if (arr.indexOf([i]) === 'kyler@test.com') {
users.slice(arr[i]);
}
}
我不确定我的每个用户是否需要在数组中指定的变量,或者它是否是我的切片。任何指导都会很棒。感谢
答案 0 :(得分:6)
由于您想要改变原始数组,因此需要splice
function deleteUser(arr, email) {
for(var i = 0; i < arr.length; i++) {
if(arr[i].email === email) {
arr.splice(i, 1)
return;
}
}
}
答案 1 :(得分:4)
在您的代码中,if语句始终为false
,因为indexOf
方法返回一个整数值,并且您使用===
将其与字符串进行比较,因此语句将始终为{{ 1}}(类型不匹配)。第二件事是slice
方法不会更新现有数组,它只是制作数组的浅表副本。
要使自己的代码能够正常工作,
false
Array#splice
方法arr[i].email === 'kyler@test.com'
删除元素。users.splice(i,1);
。最终代码:
break
使用 Array#findIndex
和 Array#splice
方法。 Array#findIndex
可用于获取元素索引(对于较旧的浏览器使用简单循环来获取索引)和 Array#splice
方法来删除它使用索引。
function deleteUser(arr)
for (var i = 0; i < users.length; i++) {
if (arr[i].email === 'kyler@test.com') {
users.slice(i, 1);
break;
}
}
}
users.splice(users.findIndex(function(v) {
return v.email == 'kyler@test.com'
}), 1);
&#13;
仅供参考:对于较旧的浏览器,请检查polyfill option of findIndex
method。
更新或使用简单的var users = [{
name: 'talon',
email: 'talon@test.com',
password: 'test1234',
username: 'tdog',
}, {
name: 'lauren',
email: 'lauren@test.com',
password: 'admin1234',
username: 'ldogg',
}, {
name: 'cohen',
email: 'cohen@test.com',
password: 'baby1234',
username: 'cdoggy',
}, {
name: 'kyler',
email: 'kyler@test.com',
password: 'delete1234',
username: 'kdawg'
}];
users.splice(users.findIndex(function(v) {
return v.email == 'kyler@test.com'
}), 1);
console.log(users);
循环获得更快且旧浏览器支持的版本;
while
var len = users.length;
// iterate upto `0`
while (len--) {
// check the email value
if (users.email == 'kyler@test.com') {
// if true then remove the element and break the while loop
users.splice(len, 1);
break;
}
}
&#13;
答案 2 :(得分:2)
您可以使用Array.prototype.findIndex()通过提供的测试功能查找数组中元素的索引(在您的情况下,您将检查email
属性)。
使用Array.prototype.slice()删除该特定索引处的对象。
下面的示例,您可以看到已从原始阵列中删除了具有该特定电子邮件的用户:
var users = [{
name: 'talon',
email: 'talon@test.com',
password: 'test1234',
username: 'tdog',
}, {
name: 'lauren',
email: 'lauren@test.com',
password: 'admin1234',
username: 'ldogg',
}, {
name: 'cohen',
email: 'cohen@test.com',
password: 'baby1234',
username: 'cdoggy',
}, {
name: 'kyler',
email: 'kyler@test.com',
password: 'delete1234',
username: 'kdawg'
}];
var removeUser = function(data, email) {
var index = data.findIndex(function(item) {
return item.email === email;
});
data.splice(index, 1);
};
removeUser(users,'kyler@test.com');
console.log(users);
&#13;