2017-01-20 9 views
0

Используя встроенные функции lodash, можно передать объект и список ключей и удалить пары ключ/значение из объекта и поместить в новый объект, который возвращается. Пример:Может ли lodash изначально вытаскивать список ключей из объекта в новый объект?

var obj = {a: 1, b: 2, c: 3}; 
pluck(obj, ['a', 'b']) // returns {a: 1, b: 2} 
console.log(obj) // {c: 3} 

где pluck заменяется одной или несколькими функциями lodash.

+1

Вам действительно нужны свойства * удалены * от исходного объекта? Это несколько странное требование. –

ответ

0

Я не думаю, что у lodash есть что-то встроенное для этого. Вы можете сделать это достаточно легко просто с JavaScript нативных функций, хотя:

var obj = {a: 1, b: 2, c: 3}; 
 
console.log(['a', 'b'].reduce(function(newObj, name) { 
 
    newObj[name] = obj[name]; 
 
    delete obj[name]; 
 
    return newObj; 
 
}, {}));   // {a: 1, b: 2} 
 
console.log(obj) // {c: 3}

что-то более lodash-у, вы могли бы объединить _.pick и _.omit, но вы будете создавать новый объект а не удалять свойства из существующего (что может быть лучше в любом случае):

var obj = {a: 1, b: 2, c: 3}; 
 
console.log(_.pick(obj, ['a', 'b'])); // {a: 1, b: 2} 
 
obj = _.omit(obj, ['a', 'b']); 
 
console.log(obj) // {c: 3}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>


99,99999% времени это не имеет значения, но только как FYI, когда вы используете delete на объекте, на некоторых двигателях JavaScript, который помещает объект в режим неоптимизированном «словаря», где последующее имущество поиск намного медленнее, чем в оптимизированном объекте. (Добавление свойств объектов не делает этого, просто удалите их.) Опять же, как правило, это не имеет значения, но ...

1

Да, используя omit и pick:

obj = _.pick(obj, ['a', 'b']); // { a: 1, b: 2 } 

Для новый объект:

var newobj = _.omit(obj, ['a', 'b']); // { c: 3 } 
+0

'omit' только делает половину того, что попросил ОП. –

+0

Какая еще половина? –

+0

Из текста вопроса: * "... и помещается в новый объект, который возвращается." * (Это также было показано в комментарии в коде). Вот почему я отвечу 'pick' +' omit' в своем ответе. –