我真的没有看到这出错的地方。我从O'Reilly的学习反应中看过这个特例的帖子,由Banks& Porcello。但是,这些帖子似乎工作正常,但我的例子没有。如果我有拼写错误,我看不到它。哪里是我的缺点?我不知道为什么我得到一个空字符串值而不是“HB Woodlawn”
var subscription =
source
.TakeWhile(data => webSocket.State == WebSocketState.Open)
.SelectMany(data =>
Observable.FromAsync(() =>
webSocket.SendAsync(data.ToString(), WebSocketMessageType.Text, true, CancellationToken.None)))
.Catch<WebSocketException>(ex =>
Observable.FromAsync(() =>
webSocket.CloseAsync(WebSocketCloseStatus.Empty, String.Empty, CancellationToken.None)))
.Subscribe();
答案 0 :(得分:5)
let schools = [
{name: 'Yorktown'},
{name: 'Stratford'},
{name: 'Washington & Lee'},
{name: 'Wakefield'}
];
const editName = (oldName, newName, arr) =>
arr.map(item => {
if (item.name === oldName) {
return {
...item,
name: newName
}
}
else {
return item
}
});
let updatedSchools = editName('Stratford', 'HB Woodlawn', schools);
console.log(updatedSchools[1]); // name: ""
console.log(schools[1]); // name: "Stratford"
您没有为名称添加新值,而是将其留空。添加了name:newName
答案 1 :(得分:0)
您当然不需要这样做:
...item,
name: newName
一旦您进行了传播复制,并将其保留为纯函数,您就可以返回新值,并映射将通过回调函数获取它。
因此,对您的问题的更好答案是,您实际上是在打错字,写的是名称,而不是新名称。本书中将该变量称为 name ,然后,一旦您重写了该函数,就已经忘了所有的内容了:)。
只需更改行;
return {
...item,
name
}
到
return {
...item,
newName
}
这更干净:)。