#javascript #arrays #object
#javascript #массивы #объект
Вопрос:
Я хочу currencyId
разделить и currencyCode
от остальных элементов в control
массиве. Прямо сейчас он выдает вывод, подобный :
[{
channels: {ANDROID: 0,EMAIL: 0,INBOX: 0,IOS: 0,SMS: 0,TELEGRAM: 0,currencyCode: "CFA",currencyId: 11},
currency: {currencyCode: "CFA",currencyId: 11}
}]
Но я хочу, чтобы вывод был таким :
[{
channels: {ANDROID: 0,EMAIL: 0,INBOX: 0,IOS: 0,SMS: 0,TELEGRAM: 0},
currency: {currencyCode: "CFA",currencyId: 11}
}]
Пока это мой код:
let chargesData = [
{
"SMS": 0,
"IOS": 0,
"ANDROID": 0,
"EMAIL": 0,
"currencyId": 11,
"currencyCode": "CFA",
"TELEGRAM": 0,
"INBOX": 0
},
{
"SMS": 10,
"IOS": 10,
"ANDROID": 10,
"EMAIL": 10,
"currencyId": 12,
"currencyCode": "IND",
"TELEGRAM": 10,
"INBOX": 10
}
]
let control = [];
let currency;
for(let charges of chargesData) {
let chargesChannels = Object.keys(charges)
let currencyCode = chargesChannels.indexOf("currencyCode");
let currencyId = chargesChannels.indexOf("currencyId");
chargesChannels.splice(currencyCode, 1);
chargesChannels.splice(currencyId, 1);
currency = { currencyCode: charges.currencyCode, currencyId: charges.currencyId };
control.push({
channels: charges,
currency: currency
})
}
console.log(control);
Как это сделать?
Ответ №1:
Вы можете сделать это с помощью .map
и destructuring
:
let chargesData = [
{
"SMS": 0,
"IOS": 0,
"ANDROID": 0,
"EMAIL": 0,
"currencyId": 11,
"currencyCode": "CFA",
"TELEGRAM": 0,
"INBOX": 0
},
{
"SMS": 10,
"IOS": 10,
"ANDROID": 10,
"EMAIL": 10,
"currencyId": 12,
"currencyCode": "IND",
"TELEGRAM": 10,
"INBOX": 10
}
]
const arr = chargesData.map(e => {
const {currencyCode, currencyId, ...channels} = e;
return {
channels: channels,
currency: {currencyCode, currencyId}
}
});
console.log(arr);
Комментарии:
1. Спасибо за ответ. Но что означает
const {currencyCode, currencyId, ...channels} = e;
эта строка? что такоеe
2. @NehalJaisalmeria добро пожаловать.
e
обозначает объект на каждой итерации, а назначение деструктурирования разбивает его наcurrencyCode
,currencyId
, иchannels
объект, содержащий остальные атрибуты. Я обновил ответ ссылками на документы для получения более подробной информации.
Ответ №2:
вы можете выполнить итерацию по массиву, а затем по свойствам объекта с помощью in
operator, а затем выделить объект по мере необходимости.
let chargesData = [
{
"SMS": 0,
"IOS": 0,
"ANDROID": 0,
"EMAIL": 0,
"currencyId": 11,
"currencyCode": "CFA",
"TELEGRAM": 0,
"INBOX": 0
},
{
"SMS": 10,
"IOS": 10,
"ANDROID": 10,
"EMAIL": 10,
"currencyId": 12,
"currencyCode": "IND",
"TELEGRAM": 10,
"INBOX": 10
}
];
const controls = [];
chargesData.forEach(charges=>{
const control={
channels:{},
currency:{}
}
for (const key in charges) {
if(["currencyCode","currencyId"].includes(key)){
control.currency[key]=charges[key];
}else{
control.channels[key]=charges[key];
}
}
controls.push(control);
});
console.log(controls);