このコードがあるとします
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
配列からid = 3のアイテムを削除したい。スプライシングなしでこれを行う方法はありますか?アンダースコアなどを使用したものはありますか?
ありがとう!
このコードがあるとします
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
配列からid = 3のアイテムを削除したい。スプライシングなしでこれを行う方法はありますか?アンダースコアなどを使用したものはありますか?
ありがとう!
プレーンな JavaScript を使用するだけで、これは既に回答されています: remove objects from array by object property。
.findWhere
underscore.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 はそのための便利な機能を提供していないようです。
アンダースコアを使用できます.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
アンダースコアを使用_.reject()
:
arr = _.reject(arr, function(d){ return d.id === 3; });
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 }];
削除するアイテムがなく、そのプロパティだけがある場合は、_.findWhere
andを使用できます_.without
。
この方法を試してみた
_.filter(data, function(d) { return d.name != 'a' });
ユーザーが提供する上記のソリューションのようなより良い方法もあるかもしれません
Underscore の reject メソッドを使用できます。以下では、特定の一致を持つ配列を持たない新しい配列を返します。
arr = _.reject(arr, function(objArr){ return objArr.id == 3; });