繁体   English   中英

从数组中拼接对象 Javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM