Как удалить из вложенного объекта ключ:значение средствами lodash?
Имеется объект с вложенной структурой. Добавить элемент в объект просто, а вот удалить не получается. Подскажите как правильно удалить вложенный элемент ключ:значение.
Код и структура объекта:
const _ = require ( 'lodash' )
.
.
.
let obj_a = { }
let obj_b = { }
let objID, receivedKey, receivedValue = null
socketio.use ( function ( socket, next ) {
objID = socket.handshake.query.objid
receivedKey = socket.handshake.query.rkey
receivedValue = socket.handshake.query.rvalue
if ( objID && receivedKey && receivedValue ) {
// проверяем на наличие нужного объекта, добавляем пустой
if ( obj_a[ objID ] === undefined ) { obj_a[ objID ] = obj_b }
// добавляем данные в объект
obj_a[ objID ][ receivedKey ] = receivedValue
return next( )
}
next ( new Error ( 'Authentication error' ) )
}
socketio.sockets.on ( 'connection', ( socket ) => {
.
.
.
socket.on ( 'disconnect', () => {
// тут пытаюсь удалить разными способами... безуспешно
// -----------------------------------------------------------
// _.remove( obj_a[ objID ], ( u ) => u === receivedKey )
// delete obj_a[ objID ][ receivedKey ]
// _.pull( obj_a[ objID ] , { receivedKey: receivedValue } )
console.log( JSON.stringify( obj_a[ objID ] ) )
} )
Ответы (1 шт):
Автор решения: Randall
→ Ссылка
Все зависит от вложенности объекта и разрешено ли мутация объекта.
Если разрешено можно использовать unset
const obj = {
a: {
name: "some"
},
b: {
g: {
find: true
}
},
id: "88"
}
unset(obj, "b.g.find");
console.log(obj.b.g.find); // undefined
Если не разрешено мутация то можно использовать omit
const obj = {
a: {
name: "some"
},
b: {
g: {
find: true
}
},
id: "88"
}
const a = omit(obj, "b.g.find"); // omit возвращает новый объект
console.log(a.b.g.find); //undefined
Удаляя ключ объекта вы также удаляете его значение.