[英]What is wrong with my object spread operator usage?
var color3 = {
name: 'Black',
type: 'special',
rating: 1
};
var rateColor3 = (colorName, Nrating) => ({ ...colorName, Nrating });
console.log(color3.rating); ///// 1
console.log(rateColor3(color3, 6).rating);//////1
console.log(color3.rating);//////1
我想在保持color3不可變的同時使用對象散布運算符,但是第二個console.log的輸出是1而不是6,我在做什么錯?
您正在為對象的鍵NRating
分配值6
,而不是現有的rating
。
因此,您的對象將如下所示:
{
name: 'Black',
type: 'special',
rating: 1,
Nrating: 6
}
要覆蓋現有的rating
屬性,您必須執行以下操作:
var rateColor3 = (colorName, Nrating) => ({ ...colorName, rating: Nrating });
或將參數Nrating
更改為rating
。
var color3 = { name: 'Black', type: 'special', rating: 1 }; var rateColor3 = (colorName, rating) => ({ ...colorName, rating }); console.log(rateColor3(color3, 6));
首先,您不是在改變原始的color3
對象,而是返回一個新的對象。 其次:
({ ...colorName, Nrating });
將返回帶有第四個道具Nrating: 6
的新對象,因為它是對象分配的簡寫。 您只需要簡單地將值分配給rating
鍵即可。
var color3 = { name: 'Black', type: 'special', rating: 1 }; var rateColor3 = (colorName, Nrating) => ({ ...colorName, rating: Nrating }); console.log(rateColor3(color3, 6));
Nrating需要一個屬性名稱
var color3 = {
name: 'Black',
type: 'special',
rating: 1
};
var rateColor3 = (colorName, Nrating) => ({ ...colorName, rating: Nrating });
console.log(color3.rating); ///// 1
console.log(rateColor3(color3, 6).rating);//////6
console.log(color3.rating);//////1
您已經創建了一個新屬性Nrating
。 將您的rating
更改為Nrating
。
var color3 = { name: 'Black', type: 'special', rating: 1 }; var rateColor3 = (colorName, Nrating) => ({ ...colorName, Nrating }); console.log(color3.rating); ///// 1 console.log(rateColor3(color3, 6).Nrating);//////6 console.log(color3.rating);//////1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.