#javascript #ecmascript-6 #destructuring
Вопрос:
Мне нужно, чтобы значение ключей в объекте arrA
копировалось на arrB
основе key
имени. Вот мои два объекта:
let arrA = {
'aaa':'',
'bbb':'',
'ccc':''
}
let arrb = {
'aaa':'111',
'bbb':'222',
'ccc':'333',
'ddd':'444',
'eee':'555',
...
}
Как мне это сделать с ES6
помощью деконструктивного задания:
arrA = {
'aaa':'111',
'bbb':'222',
'ccc':'333'
}
Ответ №1:
Используя назначение уничтожения, вам придется явно определить каждое свойство, которое вы хотите скопировать:
let arra = {
'aaa': '',
'bbb': '',
'ccc': ''
};
let arrb = {
'aaa': '111',
'bbb': '222',
'ccc': '333',
'ddd': '444',
'eee': '555',
};
({aaa: arra.aaa, bbb: arra.bbb, ccc: arra.ccc} = arrb);
console.log(arra);
Однако этот код очень повторяющийся, и хуже всего то, что он явно связан с тем, что копируется.
Ответ №2:
Цель деструктурирования состоит в том, чтобы извлечь переменные из объекта в вашу локальную область. Узнайте больше о деструктуризации здесь. Вероятно, вам лучше решить эту проблему с помощью других инструментов.
Используя комбинацию различных функций, вы можете сделать это вместо этого:
let arra = {
'aaa':'',
'bbb':'',
'ccc':''
}
let arrb = {
'aaa':'111',
'bbb':'222',
'ccc':'333',
'ddd':'444',
'eee':'555'
}
const result = Object.fromEntries(
Object.keys(arra)
.map(key => [key, arrb[key]])
)
console.log(result)
Сначала я забираю все ключи из arra с помощью Object.keys (), затем я создаю список пар с помощью функции .map (), и, наконец, я превращаю пары в новый объект с помощью Object.fromEntries()
Ответ №3:
Lodash pick()
— ваш друг здесь (потому что жизнь слишком коротка, чтобы писать скучный шаблонный код):
Ты просто npm install lodash
так и говоришь:
const _ = require('lodash');
_.pick( sourceObjectOrArray, arrayOfDesiredPaths );
Подобный этому:
const _ = require('lodash');
const source = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: 6,
g: 7,
}
const picked = _.pick( source, ['a','c','e'] );
console.log( JSON.stringify(picked) );
И вы обнаружите picked
, что это то, чего вы ожидали:
{
a: 1,
c: 3,
e: 5
}