J'ai un objet avec des paires nom-valeur. Comment puis-je cibler et supprimer une paire nom-valeur spécifique si je n'ai que la valeur?
{
1: 'foo',
2: 'boo',
3: 'goo',
4: 'moo'
}
Veuillez noter que c'est important - tout ce que j'ai est «boo», et il est possible que cette valeur change le nombre à l'avenir. J'ai besoin de cibler la chaîne exacte.
5 réponses
En fait, je l'ai simplifié un peu:
const newObj = map(myObj, value => value !== valueToRemove)
Alors voilà.
Vous pouvez utiliser pour ... de pour itérer les entrées de l'objet et créez un nouvel objet à partir des entrées qui n'ont pas la valeur spécifiée:
const obj = {
1: 'foo',
2: 'boo',
3: 'goo',
4: 'moo'
}
const omitKeyByValue = (val) => {
const r = {};
for(const [k, v] of Object.entries(obj)) {
if(obj[k] !== val) r[k] = v;
}
return r;
};
console.log(omitKeyByValue('boo'));
En utilisant cette réponse et un {{X0 }}.
Si vous souhaitez supprimer plusieurs propriétés avec cette valeur, supprimez le return obj;
de l'intérieur du for.
var valueToRemove = 'boo';
var myObj = {
1: 'foo',
2: 'boo',
3: 'goo',
4: 'moo'
};
console.log(myObj);
removePropertyByValue(myObj, valueToRemove)
console.log(myObj);
function removePropertyByValue(obj, value) {
for(var prop in obj) {
if(obj[prop] == value) {
delete obj[prop];
return obj;
}
}
return obj;
}
Étant donné que la question a été marquée avec lodash, vous pouvez utiliser son omitBy
, qui supprime une certaine propriété d'un objet en fonction de la valeur de retour de sa fonction de rappel de prédicat.
const result = _.omitBy(object, v => v === 'foo');
const object = {
1: 'foo',
2: 'boo',
3: 'goo',
4: 'moo'
};
const result = _.omitBy(object, v => v === 'foo');
console.log(result);
.as-console-wrapper{min-height:100%;top:0;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
Solution fonctionnelle et immuable:
const cleanObj = (obj, val) =>
Object.entries(obj)
.filter(([key, value]) => value !== val)
.reduce((o, [k, v]) => ({ ...o, [k]: v }), {})