亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除 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 關注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號