Javascript 前角和拼接
我有这样一个数组:Javascript 前角和拼接,javascript,angularjs,array-splice,Javascript,Angularjs,Array Splice,我有这样一个数组: $scope.emails = [ {"key":"Work","value":"user@domine.com"}, {"key":"","value":""}, {"key":"Work","value":"user2@domine.com"} {"key":"","value":""}]; 所以,我想删除空电子邮件,但angularforEach方法只删除最后一个对象,为什么 js代码 angular.forEach($scope.emails, f
$scope.emails = [
{"key":"Work","value":"user@domine.com"},
{"key":"","value":""},
{"key":"Work","value":"user2@domine.com"}
{"key":"","value":""}];
所以,我想删除空电子邮件,但angularforEach
方法只删除最后一个对象,为什么
js代码
angular.forEach($scope.emails, function(email, index){
if(email.value ===""){
$scope.emails.splice(index, 1);
}
});
我做错了什么
问题在于,在循环过程中从数组中删除元素,因此后面的项目具有不同的索引。您需要反向循环:
for (var i = $scope.emails.length - 1; i >= 0; i--) {
if (!$scope.emails[i].value) {
$scope.emails.splice(i, 1);
}
}
下面是一个。根据,迭代器函数允许第三个参数,即正在迭代的集合。拼接该集合而不是$scope.emails
将删除预期的obejct
angular.forEach($scope.emails, function(email, index, obj){
if(email.value ===""){
obj.splice(index, 1);
}
});
正如其他人指出的那样,代码的罪魁祸首是数组被删除。要使用angular.forEach,可以尝试加法/赋值方法:
var filteredEmails=[];
angular.forEach($scope.email,函数(email,索引){
如果(email.value!==“”){
filteredEmails.push(电子邮件);
}
});
$scope.emails=filteredEmails;
indexOf
在找不到项目时返回-1
删除项目并避免在找不到项目时删除最后一个项目的方法是:
var index = $scope.items.indexOf($scope.oldItem);
if (index != -1) {
$scope.items.splice(index, 1);
}
我没有在AngularJs上尝试过,但在Angular4上,类似的方法效果很好
angular.forEach($scope.emails, function(email){
if(email.value ===""){
$scope.emails.splice($scope.emails.indexOf(email), 1);
}
});
角度4版本:
this.emailArray.forEach(email => {
if (email.value == "") {
this.emailArray.splice(this.emailArray.indexOf(email),1);
}
});
请在您的问题中包含相关代码,而不仅仅是链接到JSBin。
splice
的第二个参数指示必须删除多少元素,因此,如果您以前可以确定,您也可以在一个splice
中执行此操作。例如,您可以使用$scope.emails.splice(1,2)
(或$scope.emails.splice(1)
,删除阵列中最后两封电子邮件,这将删除第一个元素之后的所有内容)。@James Allardice感谢您的重播。很好用。但我的问题是我们不能用forEach@chandu-否,forEach
以错误的方向在数组上迭代,因此必须使用普通循环。@link-只有当所讨论的元素在数组中彼此相邻时,这才起作用。当然,这就是为什么我加上了“如果你能在之前确定的话”:)OP的问题不太清楚,所以我想在他的情况允许的情况下加上它作为备注。我不是要删除空值而不是第二个索引元素吗?你的意思是要删除空元素吗?
this.emailArray.forEach(email => {
if (email.value == "") {
this.emailArray.splice(this.emailArray.indexOf(email),1);
}
});