[英]Splicing objects from an array Javascript
如果键的特定值与给定字符串匹配,我试图从数组中删除一个对象:
示例数据:
array = [{_id: "abc", test: "123"},
{_id: "def", test: "123"},
{_id: "ghi", test: "123"}];
这是我的循环:
for (var i = 0; i < array.length; i++) {
var x = "123"
if (array[i].test == x) {
array.splice(i, 1)
}
}
这应该返回一个空数组,但它在数组中留下一个对象(最后一个),我不知道为什么。
如果删除元素,则不能增加i
。
假设数组有两个匹配的元素。
第一次迭代,i = 0
i ==>> element 1
element 2
然后删除元素 1,并增加 i
element 2
i ==>>
有很多方法可以纠正这个问题。 这是一个用while
循环替换for
循环的示例。
var i = 0;
while (i < array.length) {
var x = "123"
if (array[i].test == x) {
array.splice(i, 1)
} else {
++i;
}
}
想通了:
array = array.filter(function(array) {
var x = "123";
return array.test !== x;
})
我编写了一个函数,它从 ts 中的 html 和进程中获取索引和事件值
应用程序组件.html
<tr *ngFor="let container of containers; let i = index;"
[(ngModel)]="miningname"
ngDefaultControl>
<td>
<input *ngIf="addMore" type="text" class = "form-control"
placeholder="Key"
[(ngModel)]="container.key2Name"
(ngModelChange)="textKeyChangedMore($event,i)">
</td></tr>
app.component.ts
textKeyChangedMore(eventMore, indexMore) {
var valueLength = this.selectedAPIName.length
var i = indexMore+1;
if (this.selectedAPIName[i].value == undefined ) {
this.selectedAPIName.splice(indexMore + 1, 1, { key: eventMore, value: undefined });
}
else if (this.selectedAPIName[i].value !== undefined) {
this.selectedAPIName.splice(indexMore + 1, 1, { key: eventMore, value: this.selectedAPIName[i].value });
}
}
array = [
{id: "abc", test: "123"},
{id: "def", test: "456"},
{id: "ghi", test: "789"}
];
let x = "123";
let i = array.findIndex(data => data.test === x);
if (i !== -1) {
array.splice(i, 1);
} else ...
console.log(array);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.