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

这是我的数组:


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 } ]

现在您可以看到具有未定义值的城市,如何删除它?我的意思是过滤这个并只显示带有值的键,


所以我的问题是如何过滤未定义的以及是否有其他更好的解决方案来删除不需要的对象键并显示带有所需键的新数组?或者我使用的方法性能足够?


HUH函数
浏览 51回答 4
4回答

慕村225694

您可以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)

撒科打诨

您可以检查 forEach 中的值是否未定义:const result = array2.map(e => {  const obj = {};  keys_to_keep.forEach(k => {       if (undefined !== e[k]) {          obj[k] = e[k]      }  )  return obj;});

繁星coding

您可以使用.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)

慕婉清6462132

我将回答这两部分。以下是执行此操作的步骤。map()在主阵列上使用。使用 获取每个对象的条目Object.entries()。应用于filter()整个数组,删除那些键不存在的整体keys_to_keep现在进入第二部分。使用keys_to_keep创建一个对象,其中每个键包含未定义的值。再次使用map()上一个结果并使用 Spread 运算符。首先传播上面创建的对象,然后传播原始值。这样,如果没有找到任何键,它将被设置为undefinedconst    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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript