#javascript #ecmascript-6
#язык JavaScript #ecmascript-6
Вопрос:
У меня есть объект:
const salary = { netto: { min: '700.', max: '', }, brutto: { min: '', max: '', }, }
Я хочу перебрать объект и вернуть массив объектов, которые будут выглядеть как [{name: 'netto_min', value: '700'},...etc]
пропущенные ключи с пустым значением.
Я пытался:
const result = Object.keys(salary).map(type =gt; Object.keys(salary[type]).map(entry =gt; { if(salary[type][entry] !== ''){ return {name: `${type}_${entry}`, value: parseInt(salary[type][entry]).toString()} } }) )
Это заставило меня: [[{name: 'netto_min', value: '700'}, undefined],[undefined, undefined]]
Как я могу получить [{name: 'netto_min', value: '700'}]
вместо этого?
Комментарии:
1. в значении значения вы задаете значение min ?
2. да, исправил это. Идея состояла в том, чтобы перебрать все значения и, если они присутствуют, вернуть их как часть массива объектов. Но вторая карта создает второй массив, я этого не ожидал, поэтому не уверен, как добиться нужного мне результата.
Ответ №1:
const salary = { netto: { min: "700.", max: "" }, brutto: { min: "", max: "" } }; let result = Object.keys(salary).map(k =gt; { return Object.keys(salary[k]).map(r =gt; ({ name: `${k}_${r}`, value: parseInt(salary[k][r]) })) }).flat().filter( b =gt; !isNaN(b.value))
ВОЗВРАТ
[ { name: 'netto_min', value: 700 } ]
Я предполагаю , что 700.
это была опечатка 700
, которую легко вычеркнуть
Комментарии:
1. Это была не ошибка, это было одно из принятых значений, которое необходимо пройти
parseInt
2. @Алена, поняла, обновлено
Ответ №2:
Ты мог бы сделать это:
const salary = { netto: { min: '700.', max: '', }, brutto: { min: '', max: '', }, } let result = [] for (type in salary) { for (entry in salary[type]) { let obj = {} let value = salary[type][entry] if (value) { obj.name = `${type}_${entry}` obj.value = parseInt(value).toString() result.push(obj) } } } console.log(result)
Ответ №3:
Я думаю, это то, что тебе нужно. Попробуй вот так:
const result = []; Object.entries(salary).map(entry =gt; { const prefix = entry[0]; const props = Object.entries(entry[1]) .filter(prop =gt; !!prop[1]) .map(prop =gt; ({ name: `${prefix}_${prop[0]}`, value: prop[1], })); result.push(...props); });
Ответ №4:
Получите ключи, а затем отфильтруйте этот массив по тому, является ли этот ключ непустым. затем выполните итерацию, переместите его в массив и верните.
const salary = { netto: { min: '700.', max: '', }, brutto: { min: '', max: '', }, }; var non_empty_salaries = Object.keys(salary).map(name =gt; { var keys = Object.keys(salary[name]); var non_empty = keys.filter(key =gt; salary[name][key] != ''); var non_emptys = []; for (let key of non_empty) { non_emptys.push({ name: `${name}_${key}`, value: salary[name][key] }); } return non_emptys; }); console.log(non_empty_salaries);