
[code]

    [{
      id: 1,
      data: "hoge"
    },{
      id: 3,
      data: "hogehogehoge"
    },{
      id: 4,
      data: "fugafuga"
    }];
    
[/code]

このようなデータがあった場合に、例えば`id: 3`のデータは削除するといったようなことは可能でしょうか。

[code]

    a = [{
      id: 1,
      data: "hoge"
    },{
      id: 3,
      data: "hogehogehoge"
    },{
      id: 4,
      data: "fugafuga"
    }];
    
    
    a.removeDataById(3)
    
    ↓結果
    a = [{
      id: 1,
      data: "hoge"
    },{
      id: 4,
      data: "fugafuga"
    }];
    
[/code]


CC BY-SA 3.0
2015-04-27T11:55:32.563
9605
2015-04-29T04:17:38.437
9149
question
javascript
javascriptで一致するデータが存在したら削除したい


また[`splice`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)でのソリューションを提案したいと思います。

[code]

    function removeById(array, id) {
      for (var i = array.length - 1; i >= 0; i--) {
        if (array[i].id === id) {
          array.splice(i, 1);
        }
      }
    }
    
    var array = [{
      id: 1,
      data: "hoge"
    }, {
      id: 3,
      data: "hogehogehoge"
    }, {
      id: 4,
      data: "fugafuga"
    }];
    
    removeById(array, 3);
    
    console.log(array);
[/code]


CC BY-SA 3.0
2015-04-27T11:59:01.330
9606
2015-04-27T13:00:15.377
2015-04-27T13:00:15.377
3371
3371
9605
answer

[code]

    function removeById(array, id) {
      for (var i = array.length - 1; i >= 0; i--) {
        if (array[i].id == id)
          array.splice(i, 1)
      }
    }
    
[/code]

ループの方向にご注意。


CC BY-SA 3.0
2015-04-27T12:43:49.840
9609
2015-04-27T13:09:28.990
2015-04-27T13:09:28.990
3371
9464
9605
answer


非標準ですが `Array.prototype.filter` を使うという手もあります。  
Firefox, Chrome, Opera, Safari, IE 9以上 で対応している様です。  
`Array.prototype.filter` の polyfill は [Array.prototype.filter() - JavaScript |
MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
に載っています。

[code]

    var a = [{
      id: 1,
      data: "hoge"
    }, {
      id: 3,
      data: "hogehogehoge"
    }, {
      id: 4,
      data: "fugafuga"
    }];
    
    // filter の引数: 残したい要素で true を返す関数を指定
    var b = a.filter(function(entry){return entry.id!=3;});
    
    // ※a 自体が変更されるのではなく新しい配列 b が生成される事に注意
    document.querySelector('#result').innerHTML = JSON.stringify(b);
[/code]

[code]

    <div id="result"></div>
[/code]


CC BY-SA 3.0
2015-04-27T23:35:13.697
9621
2015-04-28T01:08:49.010
2015-04-28T01:08:49.010
440
5300
9605
answer

[code]

    Array.prototype.removeById(id) {
      for (var i = this.length - 1; i >= 0; i--) {
        if (this[i].id == id)
          this.splice(i, 1)
      }
    }
    
[/code]


CC BY-SA 3.0
2015-04-29T04:17:38.437
9658
2015-04-29T04:17:38.437
9533
9605
answer