为了账号安全,请及时绑定邮箱和手机立即绑定

删除 Javascript 中不需要的对象键和未定义的键?

删除 Javascript 中不需要的对象键和未定义的键?

HUH函数 2024-01-18 16:01:25
这是我的数组:const    array1 = [  {    "value": "0",    "name": "5",    "waste": "remove",    "city": "NY"  },  {    "value": "0",    "name": "51",    "waste": "remove",  }]所以现在,我想删除某些对象并形成一个包含对象的新数组:例如,我需要删除“浪费和价值”并保留其余的内容,所以我使用了以下代码:var keys_to_keep = ['name', 'city']const result = array2.map(e => {  const obj = {};  keys_to_keep.forEach(k => obj[k] = e[k])  return obj;});console.log(result)它给出的输出为[ { name: '5', city: 'NY' }, { name: '51', city: undefined } ]现在您可以看到具有未定义值的城市,如何删除它?我的意思是过滤这个并只显示带有值的键,所以我的问题是如何过滤未定义的以及是否有其他更好的解决方案来删除不需要的对象键并显示带有所需键的新数组?或者我使用的方法性能足够?
查看完整描述

4 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

您可以e[k]在添加之前检查是否已定义,方法是使用obj以下命令检查e对象是否具有该属性:k.hasOwnProperty()

const array = [{ "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ];


const keys_to_keep = ['name', 'city'];

const result = array.map(e => {

  const obj = {};

  keys_to_keep.forEach(k => {

    if (e.hasOwnProperty(k))

      obj[k] = e[k]

  });

  return obj;

});


console.log(result)

如果要删除的键不是动态的,您还可以使用解构赋值来提取要丢弃的属性,并使用其余语法来获取没有这些属性的对象:

const array = [{ "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ];

const result = array.map(({value, waste, ...r}) => r);


console.log(result)



查看完整回答
反对 回复 2024-01-18
?
撒科打诨

TA贡献1934条经验 获得超2个赞

您可以检查 forEach 中的值是否未定义:


const result = array2.map(e => {

  const obj = {};

  keys_to_keep.forEach(k => { 

      if (undefined !== e[k]) {

          obj[k] = e[k]

      }

  )


  return obj;

});


查看完整回答
反对 回复 2024-01-18
?
繁星coding

TA贡献1797条经验 获得超4个赞

您可以使用.map迭代对象,Object.entries获取每个项目的键值对,Object.fromEntries将它们分组到结果对象中,并.filter仅获取带有keyinkeys_to_keep和 avalue不是 的条目undefined

const array1 = [

  { "value": "0", "name": "5", "waste": "remove", "city": "NY" },

  { "value": "0", "name": "51", "waste": "remove" }

];


var keys_to_keep = ['name', 'city'];


const result = array1.map(item =>

  Object.fromEntries(

    Object.entries(item).filter(([key, value]) =>

      keys_to_keep.includes(key) && value !== undefined

    )

  )

);

  

console.log(result)



查看完整回答
反对 回复 2024-01-18
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我将回答这两部分。以下是执行此操作的步骤。

  • map()在主阵列上使用。

  • 使用 获取每个对象的条目Object.entries()

  • 应用于filter()整个数组,删除那些键不存在的整体keys_to_keep

现在进入第二部分。

  • 使用keys_to_keep创建一个对象,其中每个键包含未定义的值。

  • 再次使用map()上一个结果并使用 Spread 运算符。首先传播上面创建的对象,然后传播原始值。这样,如果没有找到任何键,它将被设置为undefined

const

    array1 = [

  {

    "value": "0",

    "name": "5",

    "waste": "remove",

    "city": "NY"

  },

  {

    "value": "0",

    "name": "51",

    "waste": "remove",

  }

]

var keys_to_keep = ['name', 'city']

let obj = Object.fromEntries(keys_to_keep.map(x => [x, undefined]));

const res = array1.map(obj =>

                 Object.fromEntries(

                    Object.entries(obj).filter(([k, v]) => keys_to_keep.includes(k))))

                    .map(x => ({...obj, ...x}))

console.log(res)


查看完整回答
反对 回复 2024-01-18
  • 4 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信