我试图在下面的json中更新BMW 730d的价格。
汽车对象应该是一个新对象,(Immutability),所以我需要使用map函数。
而且我不想使用像immutable或normalizr这样的库。我的目标是了解地图功能,但我仍在评估品牌名称。
const cars =
[
{
brand: 'BMW',
model: [
{
name: '535d',
price: 35000
}, {
name: '730d',
price: 55000
}
]
},
{
brand: 'Mercedes',
model: [
{
name: 'roadstar',
price: 75000
},
]
},
];
这是我到目前为止所做的:
// trying to update the price of a BMW 730d
const newCars= cars.map(brand => {
console.log(brand);
// and now ?
});
但现在我被困了。
谁帮帮我?
谢谢!
[编辑]我添加了一个id"品牌"在json中识别模型。
答案 0 :(得分:1)
您将检查当前对象是否与BMW有关并返回一个新对象(带有所需的新模型列表),否则只返回未更改的对象:
const newCars = cars.map(car => {
if (car.brand == "BMW") {
return {
brand: "BMW",
model: car.model.map(model => {
// …
}),
};
} else {
return car;
}
});
要更新model
数组中的相应对象,请再次使用完全相同的方法。
答案 1 :(得分:0)
作为一种技术性,你对不变性的描述是不正确的。不可变意味着基本无法变异。在你的情况下,你只是决定不变异。
不幸的是,根据您的数据结构,您必须有点凌乱才能提取密钥。 Object.keys
是我能想到的最佳方式。它返回一个数组,因此您必须键入索引0
。
cars.map(car => {
const brand = Object.keys(car)[0];
if (brand === 'BMW') {
}
})
答案 2 :(得分:-1)
你必须测试对象的属性,你可以使用对象的方法“hasOwnProperty”来知道对象x是否具有属性y,在你的情况下你要做以下测试:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Globals.ThisAddIn.Application.SheetSelectionChange += Application_SheetSelectionChange;
}
private void Application_SheetSelectionChange(object Sh, Excel.Range Target)
{
tdsRelTbox.Text = Target.Address;
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
Globals.ThisAddIn.Application.SheetSelectionChange -= Application_SheetSelectionChange;
}