2016-10-30 4 views
17

Ich muss unerwünschte Objekteigenschaften entfernen, die nicht mit meinem Modell übereinstimmen. Wie kann ich es mit lodash erreichen?Entfernen von Objekteigenschaften mit lodash

Mein Modell ist

var model = { 
    fname:null, 
    lname:null 
} 

Mein Reglerausgang vor Server

var credentials = { 
    fname:"xyz", 
    lname:"abc", 
    age:23 
} 

wird es sein, zu senden, wenn ich

verwenden
_.extend (model, credentials) 

ich bin immer zu Alter Eigenschaft. Ich bin mir bewusst, ich kann

delete credentials.age 

aber was ist, wenn ich mehr als 10 unerwünschte Objekte haben. Kann ich es mit lodash erreichen?

Antwort

18

Hier finden Sie eine Liste der Eigenschaften von model_.keys() verwenden, und verwenden _.pick() die Eigenschaften von credentials auf ein neues Objekt zu extrahieren:

var model = { 
 
    fname:null, 
 
    lname:null 
 
}; 
 

 
var credentials = { 
 
    fname:"xyz", 
 
    lname:"abc", 
 
    age:23 
 
}; 
 

 
var result = _.pick(credentials, _.keys(model)); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>

Wenn Sie nicht wollen, lodash verwenden Sie können Object.keys() und Array.prototype.reduce():

var model = { 
 
    fname:null, 
 
    lname:null 
 
}; 
 

 
var credentials = { 
 
    fname:"xyz", 
 
    lname:"abc", 
 
    age:23 
 
}; 
 

 
var result = Object.keys(model).reduce(function(obj, key) { 
 
    obj[key] = credentials[key]; 
 
    return obj; 
 
}, {}); 
 

 
console.log(result);
verwenden

3

Sie können dies ganz einfach mit _.pick:

var model = { 
 
fname:null, 
 
lname:null 
 
}; 
 

 
var credentials = { 
 
    fname: 'abc', 
 
    lname: 'xyz', 
 
    age: 2 
 
}; 
 

 
var result = _.pick(credentials, _.keys(model)); 
 

 

 
console.log('result =', result);
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>

Aber Sie können einfach mit reinem JavaScript (besonders, wenn Sie ES6 verwenden), wie folgt aus:

const model = { 
 
    fname: null, 
 
    lname: null 
 
}; 
 

 
const credentials = { 
 
    fname: 'abc', 
 
    lname: 'xyz', 
 
    age: 2 
 
}; 
 

 
const newModel = {}; 
 

 
Object.keys(model).forEach(key => newModel[key] = credentials[key]); 
 

 
console.log('newModel =', newModel);

35

Sie können es von nähern entweder eine weiße Liste oder schwarze Liste Art und Weise:

// Black list 
// Remove the values you don't want 
var result = _.omit(credentials, ['age']); 

// White list 
// Only allow certain values 
var result = _.pick(credentials, ['fname', 'lname']); 

Wenn es wieder verwendbare Business-Logik ist, können Sie teilweise können auch Sie es aus:

// Partial out a black list version 
var clean = _.partial(omit, _, ['age']); 

// and later 
var result = clean(credentials); 
+1

ist dies die richtige Antwort, da die Funktion, die entfernt '_.omit' entfernt, während '_.pick' angibt, was Sie wollen (was genau das Gegenteil ist) – thiagoh

+0

richtig - und hängt von Ihrem allgemeinen Ansatz und der umgebenden Geschäftslogik ab - jede Version wird abhängig von Ihrer funktionieren Anforderungen – Chris

+0

Für den partiellen haben Sie einen Tippfehler gemacht, seine '_.partial (_. Omit ...'. –

Verwandte Themen