4 回答
TA贡献1858条经验 获得超8个赞
那 ?
const arr =
[ { id: 123, val: 'abcd', other: 'abcd' }
, { id: 123, val: 'abcd', other: 'abcd', show: true }
, { id: 123, val: 'abcd', other: 'abcd', show: false }
, { id: 123, val: 'abcd', other: 'abcd' }
]
const newArr = arr.map(({id,val,show})=>show?{id,val,show}:{id,val})
console.log( newArr )
.as-console-wrapper { max-height: 100% !important; top: 0; }
TA贡献1789条经验 获得超8个赞
你可以像这样重写它。使用这种语法,当item.show括号为真时,您将解析为和对象,然后您只需将其传播到您的对象中。您还可以使用无效合并来分配item.val
const expectedArr = arr.map((item) => ({
id: item.id,
val: item.val ?? "",
...(item.show && { show: item.show }),
}));
TA贡献1877条经验 获得超1个赞
目前,它在函数内部的一行中包含多个条件,Array.map并且无效。
const arr = [{id: 123, val: 'abcd', other: 'abcd'}, {id: 123, val: 'abcd', other: 'abcd', show: true}, {id: 123, val: 'abcd', other: 'abcd', show: false}, {id: 123, val: 'abcd', other: 'abcd'}]
const result = arr.map(({ id, val, show }) => {
const newObj = {
id,
val: val != null ? val : ''
};
if (show) {
newObj['show'] = show;
}
return newObj;
});
console.log(result);
TA贡献1875条经验 获得超5个赞
const arr = [{id: 123, val: 'abcd', other: 'abcd'}, {id: 123, val: 'abcd', other: 'abcd', show: true}, {id: 123, val: 'abcd', other: 'abcd', show: false}, {id: 123, val: 'abcd', other: 'abcd'}]
const expectedArr = arr.map(item => ({id: item.id, val: item.val? item.val: '', show: item.show? item.show: 0}))
console.log(expectedArr); //solved-ish
//but honestly, that's the furthest i can go with your strange code golfed syntax setup.. to be honest, using ? is similar to if but NOT if, it's closer to || but anyway
console.log('skip what was above, the moment of truth below')
const theRealAnswer = arr.map(item=>{ const i={id: item.id, val: item.val? item.val: '', show: item.show? item.show: 0};if(!i.show){delete(i.show)}return(i) })
console.log(theRealAnswer)
//now, the logical construct(what u gave the mapper) was impossible to do what u wanted. coding isn't just syntax, it's logic too. you cannot assign a key to completely delete the key itself
添加回答
举报