143

このコードがあるとします

var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];

配列からid = 3のアイテムを削除したい。スプライシングなしでこれを行う方法はありますか?アンダースコアなどを使用したものはありますか?

ありがとう!

4

11 に答える 11

284

プレーンな JavaScript を使用するだけで、これは既に回答されています: remove objects from array by object property

.findWhereunderscore.js を使用すると、以下と組み合わせることができます.without

var arr = [{
  id: 1,
  name: 'a'
}, {
  id: 2,
  name: 'b'
}, {
  id: 3,
  name: 'c'
}];

//substract third
arr = _.without(arr, _.findWhere(arr, {
  id: 3
}));
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

ただし、この場合はとにかく新しい配列を作成しているため、単に_.filterまたはネイティブArray.prototype.filter関数を使用できます (他の質問に示されているように)。次に、ここのように潜在的に2回ではなく、配列を1回だけ反復します。

配列をその場で変更したい場合は、 を使用する必要があります.splice。これは他の質問にも示されていますが、 undescore はそのための便利な機能を提供していないようです。

于 2013-06-07T23:18:56.890 に答える
96

アンダースコアを使用できます.filter

    var arr = [{
      id: 1,
      name: 'a'
    }, {
      id: 2,
      name: 'b'
    }, {
      id: 3,
      name: 'c'
    }];

    var filtered = _(arr).filter(function(item) {
         return item.id !== 3
    });

次のように書くこともできます。

var filtered = arr.filter(function(item) {
    return item.id !== 3
});

var filtered = _.filter(arr, function(item) {
    return item.id !== 3
});

フィドルをチェック

使用することもできます.reject

于 2013-06-07T23:17:25.887 に答える
39

アンダースコアを使用_.reject():

arr = _.reject(arr, function(d){ return d.id === 3; });
于 2015-07-27T10:24:29.687 に答える
18

Underscore には、特に削除するオブジェクトがある場合に、配列からアイテムを削除するのに最適な_without()メソッドがあります。

値のすべてのインスタンスが削除された配列のコピーを返します。

_.without(["bob", "sam", "fred"], "sam");

=> ["bob", "fred"]

より複雑なオブジェクトでも動作します。

var bob = { Name: "Bob", Age: 35 };
var sam = { Name: "Sam", Age: 19 };
var fred = { Name: "Fred", Age: 50 };

var people = [bob, sam, fred]

_.without(people, sam);

=> [{ Name: "Bob", Age: 35 }, { Name: "Fred", Age: 50 }];

削除するアイテムがなく、そのプロパティだけがある場合は、_.findWhereandを使用できます_.without

于 2015-09-18T22:15:18.090 に答える
0

この方法を試してみた

_.filter(data, function(d) { return d.name != 'a' });

ユーザーが提供する上記のソリューションのようなより良い方法もあるかもしれません

于 2016-03-01T06:45:28.160 に答える
-1

Underscore の reject メソッドを使用できます。以下では、特定の一致を持つ配列を持たない新しい配列を返します。

arr = _.reject(arr, function(objArr){ return objArr.id == 3; });
于 2015-09-24T04:44:15.533 に答える