Diyelim ki bu koda sahibim
var arr = [{id: 1, ad: 'a'}, {id: 2, ad: 'b'}, {id: 3, ad: 'c'}];
ve id = 3 olan öğeyi diziden kaldırmak istiyorum. Eklemeden bunu yapmanın bir yolu var mı? Alt çizgi veya benzeri bir şey kullanabilir miyim?
Teşekkürler!
Diyelim ki bu koda sahibim
var arr = [{id: 1, ad: 'a'}, {id: 2, ad: 'b'}, {id: 3, ad: 'c'}];
ve id = 3 olan öğeyi diziden kaldırmak istiyorum. Eklemeden bunu yapmanın bir yolu var mı? Alt çizgi veya benzeri bir şey kullanabilir miyim?
Teşekkürler!
Yanıtlar:
Sadece düz JavaScript kullanarak, bu zaten cevaplandı: Nesneleri nesneden diziye kaldırmak .
Underscore.js kullanarak, birleştirmek olabilir .findWhere
ile .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>
Yine de, bu durumda yeni bir dizi oluşturduğunuzdan, basitçe _.filter
veya yerel Array.prototype.filter
işlevi (tıpkı diğer soruda gösterildiği gibi) kullanabilirsiniz. O zaman burada iki kez potansiyel olarak iki kez yerine dizi üzerinde tekrarlarsınız.
Diziyi yerinde değiştirmek istiyorsanız, kullanmanız gerekir .splice
. Bu diğer soruda da gösterilmektedir ve undescore bunun için herhangi bir yararlı işlev sağlamamaktadır.
_.reject
burada daha iyi bir seçim gibi görünüyor.
arr.pop()
...
Alt Çizgi'yi kullanabilirsiniz .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
});
Ayrıca şu şekilde de yazılabilir:
var filtered = arr.filter(function(item) {
return item.id !== 3
});
var filtered = _.filter(arr, function(item) {
return item.id !== 3
});
Ayrıca kullanabilirsiniz .reject
_()
, koleksiyon çevresinde alt çizgi yöntemlerini çağırmanıza izin verecek bir sarıcı oluşturacaktır.
Alt Çizgi Kullan _.reject()
:
arr = _.reject(arr, function(d){ return d.id === 3; });
arr = _.reject(arr, d => d.id === 3 );
Alt çizgi , özellikle kaldırılacak nesneniz varsa, bir öğeyi bir diziden kaldırmak için mükemmel bir _without () yöntemine sahiptir.
Tüm değerlerin kaldırıldığı dizinin bir kopyasını döndürür.
_.without(["bob", "sam", "fred"], "sam");
=> ["bob", "fred"]
Daha karmaşık nesnelerle de çalışır.
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 }];
Kaldırılacak öğeniz yoksa, yalnızca bir özelliği, _.findWhere
ve ardından kullanabilirsiniz _.without
.
Dizeleri filtreler ve büyük / küçük harfe duyarlı olmayan filtreler arıyorsanız lütfen dikkatli olun. _.without () büyük / küçük harfe duyarlıdır. Aşağıda gösterildiği gibi _.reject () yöntemini de kullanabilirsiniz.
var arr = ["test","test1","test2"];
var filtered = _.filter(arr, function(arrItem) {
return arrItem.toLowerCase() !== "TEST".toLowerCase();
});
console.log(filtered);
// ["test1", "test2"]
var filtered1 = _.without(arr,"TEST");
console.log(filtered1);
// ["test", "test1", "test2"]
var filtered2 = _.reject(arr, function(arrItem){
return arrItem.toLowerCase() === "TEST".toLowerCase();
});
console.log(filtered2);
// ["test1", "test2"]
Diğer cevaplar dizinin yeni bir kopyasını oluşturur, diziyi yerinde değiştirmek isterseniz kullanabilirsiniz:
arr.splice(_.findIndex(arr, { id: 3 }), 1);
Ancak bu, öğenin her zaman dizinin içinde bulunacağını varsayar (çünkü bulunamazsa yine de son öğeyi kaldıracaktır). Güvende olmak için şunları kullanabilirsiniz:
var index = _.findIndex(arr, { id: 3 });
if (index > -1) {
arr.splice(index, 1);
}
ya da başka bir kullanışlı yol:
_.omit(arr, _.findWhere(arr, {id: 3}));
benim 2 sentim
object
ve döndürür object
. bu nedenle, bir elemanı çıkardıktan sonra geri Arrays
almayı bekleyebileceğimiz yerlerle çalışmak için iyi değildir array
.
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); => [2, 3, 4]
Kullanım kullanabilirsiniz düz JavaScript'in 'ın Array#filter
böyle bir yöntem:
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var filteredArr = arr.filter(obj => obj.id != 3);
console.log(filteredArr);
Veya, aşağıdaki gibi kullanım Array#reduce
ve Array#concat
yöntemler:
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var reducedArr = arr.reduce((accumulator, currObj) => {
return (currObj.id != 3) ? accumulator.concat(currObj) : accumulator;
}, []);
console.log(reducedArr);
NOT:
Bu yöntemi denerdim
_.filter(data, function(d) { return d.name != 'a' });
Kullanıcılar tarafından sağlanan yukarıdaki çözümler gibi daha iyi yöntemler de olabilir
Underscore.js Kullanarak
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var resultArr = _.reject(arr,{id:3});
console.log(resultArr);
Sonuç: [{id:1name:'a'},{id:2,name:'c'}]