如果匹配条件,则在对象数组中添加键

我正在尝试根据条件获取一组对象。如果该值为真,则仅将该键和值添加到新的对象数组中。

但是,它给出了错误:

  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(item => ({id: item.id, val: item.val != null ? item.val : ''}))


console.log(newArr); //It is working


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 != null ? item.val : '', (item.show) && (show: item.show)}))


console.log(expectedArr); //Shows error

预期结果:


[

  {

    "id": 123,

    "val": "abcd"

  },

  {

    "id": 123,

    "val": "abcd"

    "show": true

  },

  {

    "id": 123,

    "val": "abcd"

  },

  {

    "id": 123,

    "val": "abcd"

  }

]

任何帮助将不胜感激。


慕后森
浏览 119回答 4
4回答

猛跑小猪

那 ?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; }

拉丁的传说

你可以像这样重写它。使用这种语法,当item.show括号为真时,您将解析为和对象,然后您只需将其传播到您的对象中。您还可以使用无效合并来分配item.val const expectedArr = arr.map((item) => ({      id: item.id,      val: item.val ?? "",      ...(item.show && { show: item.show }),    }));

冉冉说

目前,它在函数内部的一行中包含多个条件,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);

慕田峪4524236

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 anywayconsole.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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript