[英]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.