J'ai un tableau d'objets comme celui-ci:
var myArray = [
{field: 'id', operator: 'eq', value: id},
{field: 'cStatus', operator: 'eq', value: cStatus},
{field: 'money', operator: 'eq', value: money}
];
Comment puis-je supprimer un spécifique en fonction de sa propriété?
par exemple. Comment pourrais-je supprimer l'objet tableau avec 'money' comme propriété du champ?
Une possibilité:
myArray = myArray.filter(function( obj ) {
return obj.field !== 'money';
});
Veuillez noter que filter
crée un nouveau tableau. Toutes les autres variables faisant référence au tableau d'origine n'obtiendraient pas les données filtrées bien que vous mettiez à jour votre variable d'origine myArray
avec la nouvelle référence. Utiliser avec précaution.
Parcourez le tableau et splice
dehors ceux que vous ne voulez pas. Pour une utilisation plus facile, itérez en arrière pour ne pas avoir à prendre en compte la nature réelle du tableau
for (var i = myArray.length - 1; i >= 0; --i) {
if (myArray[i].field == "money") {
myArray.splice(i,1);
}
}
Supposons que vous souhaitiez supprimer le deuxième objet par sa propriété de champ.
Avec ES6, c'est aussi simple que cela.
myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1)
Vous pouvez utiliser findIndex de lodash pour obtenir l'index de l'élément spécifique, puis le lier.
myArray.splice(_.findIndex(myArray, function(item) {
return item.value === 'money';
}), 1);
Mettre à jour
Vous pouvez aussi utiliser ES6's findIndex ()
La méthode findIndex () renvoie l'index du premier élément du tableau qui satisfait à la fonction de test fournie. Sinon, -1 est renvoyé.
myArray.splice(myArray.findIndex(myArray, function(item) {
return item.value === 'money';
}), 1);
Voici une autre option utilisant jQuery grep. Passez true
en tant que troisième paramètre pour vous assurer que grep supprime les éléments correspondant à votre fonction.
users = $.grep(users, function(el, idx) {return el.field == "money"}, true)
Si vous utilisez déjà jQuery, aucun shim n'est requis, ce qui pourrait être utile par opposition à l'utilisation de Array.filter
.
Voici le code si vous n'utilisez pas jQuery. Démo
var myArray = [
{field: 'id', operator: 'eq', value: 'id'},
{field: 'cStatus', operator: 'eq', value: 'cStatus'},
{field: 'money', operator: 'eq', value: 'money'}
];
alert(myArray.length);
for(var i=0 ; i<myArray.length; i++)
{
if(myArray[i].value=='money')
myArray.splice(i);
}
alert(myArray.length);
Vous pouvez également utiliser une bibliothèque de soulignement qui a beaucoup de fonctions.
Underscore est une bibliothèque de ceinture utilitaire pour JavaScript fournissant une grande partie du support de programmation
var myArray = [
{field: 'id', operator: 'eq', value: id},
{field: 'cStatus', operator: 'eq', value: cStatus},
{field: 'money', operator: 'eq', value: money}
];
console.log(myArray.length); //3
myArray = $.grep(myArray, function(element, index){return element.field == "money"}, true);
console.log(myArray.length); //2
L'élément est un objet du tableau . Le troisième paramètre true
signifie qu'un tableau d'éléments qui échoue dans la logique de votre fonction, false
signifie qu'un tableau d'éléments qui échoue dans votre logique de fonction.
var myArray = [
{field: 'id', operator: 'eq', value: 'id'},
{field: 'cStatus', operator: 'eq', value: 'cStatus'},
{field: 'money', operator: 'eq', value: 'money'}
];
var newArray = _.remove(myArray, function(n) {
return n.value === 'money';;
});
console.log('Array');
console.log(myArray);
console.log('New Array');
console.log(newArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>
la solution de jAndy est probablement la meilleure, mais si vous ne pouvez pas compter sur le filtre, vous pouvez faire quelque chose comme:
var myArray = [
{field: 'id', operator: 'eq', value: 'id'},
{field: 'cStatus', operator: 'eq', value: 'cStatus'},
{field: 'money', operator: 'eq', value: "money"}
];
myArray.remove_key = function(key){
var i = 0,
keyval = null;
for( ; i < this.length; i++){
if(this[i].field == key){
keyval = this.splice(i, 1);
break;
}
}
return keyval;
}
En fonction de certains commentaires ci-dessous, le code explique comment supprimer un objet en fonction d'un nom de clé et d'une valeur
var items = [
{ "id": 3.1, "name": "test 3.1"},
{ "id": 22, "name": "test 3.1" },
{ "id": 23, "name": "changed test 23" }
]
function removeByKey(array, params){
array.some(function(item, index) {
return (array[index][params.key] === params.value) ? !!(array.splice(index, 1)) : false;
});
return array;
}
var removed = removeByKey(items, {
key: 'id',
value: 23
});
console.log(removed);