JS過濾對象中的屬性

一、過濾空值屬性

在處理對象時,可能會出現屬性值為空的情況,這些屬性在實際應用中可能沒有太大的意義,甚至可能導致一些錯誤。因此,過濾空值屬性是很有必要的。


const obj1 = { name: 'Lucy', age: null, sex: 'female' };
const obj2 = { height: undefined, weight: 50, age: 20 };

// 用Object.keys 和 reduce 方法過濾空值屬性
const filterEmptyProps = obj => {
  return Object.keys(obj).reduce((acc, key) => {
    if (obj[key] !== null && obj[key] !== undefined) {
      acc[key] = obj[key];
    }
    return acc;
  }, {});
}

console.log(filterEmptyProps(obj1)); // { name: 'Lucy', sex: 'female' }
console.log(filterEmptyProps(obj2)); // { weight: 50, age: 20 }

上述代碼中, filterEmptyProps() 方法定義了一個 reduce() 函數,遍歷對象的每一個屬性,如果屬性值不為空,則添加該屬性到新對象中。最終返回一個過濾後的新對象。

二、過濾不需要的屬性

有時候,我們需要從一個對象中過濾掉一些不需要的屬性,這可以通過 delete 關鍵字實現。


const obj = { id: 1, name: 'Lucy', age: 20 };

// 過濾掉 id 屬性
delete obj.id;

console.log(obj); // { name: 'Lucy', age: 20 }

上述代碼中的 delete 關鍵字可以刪除對象中的某一個屬性。實現過濾不需要的屬性的效果。

三、過濾數組對象的屬性

當我們需要處理一個數組對象時,可以使用 Array.prototype.map() 方法過濾掉不需要的屬性。


const users = [
  { name: 'Lucy', age: 20 },
  { name: 'Tom', age: 25 },
  { name: 'Jone', age: 30 }
];

// 過濾掉 age 屬性
const filteredUsers = users.map(({ name }) => ({ name }));

console.log(filteredUsers);
// [{ name: 'Lucy' }, { name: 'Tom' }, { name: 'Jone' }]

上述代碼中, Array.prototype.map() 方法將一個數組對象中的每一個元素轉化為一個新的數組對象,新的數組對象只包含需要的屬性。這裡使用了對象解構,方便的獲取到每個元素的屬性。

四、過濾數組中選中的對象

有時候我們需要從一個數組中選出一個符合條件的對象,可以使用 Array.prototype.filter() 方法過濾。


const users = [
  { name: 'Lucy', age: 20 },
  { name: 'Tom', age: 25 },
  { name: 'Jone', age: 30 }
];

// 過濾出 age 大於 23 的元素
const filteredUsers = users.filter(({ age }) => age > 23);

console.log(filteredUsers);
// [{ name: 'Tom', age: 25 }, { name: 'Jone', age: 30 }]

上述代碼中,使用 Array.prototype.filter() 方法過濾出 age 大於 23 的元素。

五、過濾數組對象

有時候我們需要過濾整個數組對象,而不是其中的一個屬性或選中的對象。可以使用 Array.prototype.map() 方法和對象解構來實現這一效果。


const users = [
  { name: 'Lucy', age: 20 },
  { name: 'Tom', age: 25 },
  { name: 'Jone', age: 30 }
];

// 只保留 name 屬性
const filteredUsers = users.map(({ name }) => ({ name }));

console.log(filteredUsers);
// [{ name: 'Lucy' }, { name: 'Tom' }, { name: 'Jone' }]

上述代碼中,使用 Array.prototype.map() 方法和對象解構把每一個元素轉化為新的數組對象,數組對象只保留了 name 屬性。

六、過濾數組中重複的對象

處理數組對象時,有時需要過濾掉重複的元素。可以使用 Set 和 Array.prototype.filter() 方法來實現。


const users = [
  { name: 'Lucy', age: 20 },
  { name: 'Lucy', age: 25 },
  { name: 'Tom', age: 25 },
  { name: 'Jone', age: 30 }
];

// 過濾重複元素
const filteredUsers = users.filter((user, index, array) => {
  const firstIndex = array.findIndex(item => item.name === user.name);
  return firstIndex === index;
})

console.log(filteredUsers);
// [{ name: 'Lucy', age: 20 }, { name: 'Tom', age: 25 }, { name: 'Jone', age: 30 }]

上述代碼中,使用 Array.prototype.filter() 方法和 Array.prototype.findIndex() 方法來過濾掉重複元素。

七、使用 filter() 過濾對象

JS中有一個 Array.prototype.filter() 方法,可以用於數組的過濾,通過一些小技巧,我們也可以使用它來對對象進行過濾。如下所示:


const obj = { name: 'Lucy', age: 20, sex: 'female' };

// 過濾年齡小於 25 的屬性
const filteredObj = Object.fromEntries(
  Object.entries(obj).filter(([key, value]) => key !== 'age' || value >= 25)
);

console.log(filteredObj);
// { name: 'Lucy', age: 25, sex: 'female' }

上述代碼中,使用 Object.entries() 方法將對象轉化為一個鍵值對數組,然後使用 Array.prototype.filter() 方法篩選出需要的屬性並返回一個新的數組,最後使用 Object.fromEntries() 方法將篩選後的數組轉化為一個新的對象。

八、使用 Object.keys() 和 reduce() 過濾空屬性

我們可以使用 Object.keys() 和 reduce() 方法來過濾對象空屬性,如下所示:


const obj = { name: 'Lucy', age: null, sex: 'female' };

// 過濾空屬性
const filteredObj = Object.keys(obj).reduce((acc, key) => {
  if (obj[key] !== undefined && obj[key] !== null) {
    acc[key] = obj[key];
  }
  return acc;
}, {});

console.log(filteredObj);
// { name: 'Lucy', sex: 'female' }

上述代碼中,使用 Object.keys() 方法返回對象的屬性名,再使用 reduce() 方法遍歷對象,如果屬性值不為空,則添加該屬性到新對象中,最終返回包含非空屬性的新對象。

九、使用 Object.keys() 和 reduce() 過濾符合條件的欄位

我們可以使用 Object.keys() 和 reduce() 方法來過濾符合條件的欄位,如下所示:


const obj = { name: 'Lucy', age: 20, sex: 'female' };

// 過濾屬性名為 name 和 sex 的屬性
const filteredObj = Object.keys(obj).reduce((acc, key) => {
  if (['name', 'sex'].includes(key)) {
    acc[key] = obj[key];
  }
  return acc;
}, {});

console.log(filteredObj);
// { name: 'Lucy', sex: 'female' }

上述代碼中,使用 Object.keys() 方法返回對象的屬性名,再使用 reduce() 方法遍歷對象,篩選出滿足條件的屬性名,最終返回包含滿足條件的屬性的新對象。

十、使用 Array.prototype.filter() 過濾數組中的某個屬性

我們可以使用 Array.prototype.filter() 過濾數組中的某個屬性,如下所示:


const users = [
  { name: 'Lucy', age: 20 },
  { name: 'Tom', age: 25 },
  { name: 'Jone', age: 30 }
];

// 只保留 name 和 age 屬性
const filteredUsers = users.filter(user => {
  const { name, age } = user;
  return { name, age }
});

console.log(filteredUsers);
// [{ name: 'Lucy', age: 20 }, { name: 'Tom', age: 25 }, { name: 'Jone', age: 30 }]

上述代碼中,使用 Array.prototype.filter() 方法篩選出符合條件的元素,並返回一個包含需要的屬性的新數組。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247237.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:19
下一篇 2024-12-12 13:19

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Vant ContactList 增加屬性的實現方法

    在使用前端UI框架Vant中的ContactList組件時,我們有時需要為此組件增加一些個性化的屬性,來滿足我們特定的需求。那麼,如何實現ContactList組件的增加屬性功能呢…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演著非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • JS圖片沿著SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿著SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • PowerDesigner批量修改屬性

    本文將教您如何使用PowerDesigner批量修改實體、關係等對象屬性。 一、選擇要修改的對象 首先需要打開PowerDesigner,並選擇要修改屬性的對象。可以通過以下兩種方…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27

發表回復

登錄後才能評論