簡體   English   中英

過濾對象的數組屬性而無需更改對象本身

[英]Filter array property of object without mutating the object itself

我想過濾一個對象的屬性而不改變該對象。

let myObject = {
    propA: [1,2,3],
    propB: "foo"
}

現在我想做些類似的事情:

myObject.propA.filter(el => el === 2)

但這只會返回過濾后的數組,我將不得不編寫

myObject.propA = myObject.propA.filter(el => el === 2)

為了改變我的目的。

但這絕對不是我想要的! 我想生成一個新的過濾對象,而不會使舊對象發生變化。 有人可以幫我嗎?

您可以filter()數組,然后將其與原始對象合並以創建一個新的數組而無需更改原始數組。 就像是:

 let myObject = { propA: [1,2,3], propB: "foo" } let propA = myObject.propA.filter(el => el === 2) let newobj = {...myObject, propA} // new Object console.log("New:", newobj) // old object unchanges console.log("Old:", myObject) 

您可以使用解構分配和散布參數編寫transform

 const transform = ({ a = [], ...rest }) => ({ a: a .filter (el => el === 2) , ...rest }) const myObject = { a: [ 1, 2, 3 ] , b: "foo" } console .log ( transform (myObject) // { a: [ 2 ], b: "foo" } , transform ({ a: [ 1, 2, 1, 2, 1, 2 ], b: "bar", c: "cat" }) // { a: [ 2, 2, 2 ], b: "bar", c: "cat" } , transform ({ y: "z" }) // { a: [], y: "z" } ) 

您也可以克隆對象並僅更改新對象的屬性。

let myObject = {
    propA: [1,2,3],
    propB: "foo"
}
let newObject = Object.create(myObject);
newObject.propA = myObject.propA.filter(el=> el ===2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM