list - 如何根据 Flutter 中的条件从其他两个列表中正确生成列表
问题描述
我正在尝试根据其他两个列表生成一个名为 selectedBooks 的列表:
这是第一个列表:
List<Book> availableBooks = [
Book(
id: 1,
isActive: false,
name: "Tipo 1"
),
Book(
id: 2,
isActive: false,
name: "Tipo 2"
),
Book(
id: 3,
isActive: false,
name: "Tipo 3"
),
Book(
id: 4,
isActive: false,
name: "Tipo 4"
),
]
这是第二个列表:
List<Book> allowedBooks = [
Book(
id: 1,
isActive: true,
name: "Tipo 1"
),
Book(
id: 3,
isActive: true,
name: "Tipo 3"
),
]
这是我要生成的列表:
selectedBooks = availableBooks
.map((book) =>
allowedBooks.contains(book.id)
? Book(
id: book.id,
isActive: true,
name: book.name)
: Book(
id: book.id,
isActive: false,
name: book.name))
.toList();
由于 allowedBooks 确实包含 id 1 和 3,我希望 selectedBooks 是:
List<Book> selectedBooks = [
Book(
id: 1,
isActive: true,
name: "Tipo 1"
),
Book(
id: 2,
isActive: false,
name: "Tipo 2"
),
Book(
id: 3,
isActive: true,
name: "Tipo 3"
),
Book(
id: 4,
isActive: false,
name: "Tipo 4"
),
]
但是,这不起作用,因为 selectedBooks 最终将所有 book.isActive 设置为 false。
我认为在包括以下条件的情况下某些东西没有按预期工作:
selectedBooks = availableBooks
.map((book) =>
allowedBooks.contains(book.id) ? ...
有什么线索吗?非常感谢。
解决方案
而不是allowedBooks.contains(book.id)
你应该使用allowedBooks.any((allowedBook) => allowedBook.id == book.id)
推荐阅读
- ffmpeg - 从 *.ts 文件生成 m3u8 播放列表
- ios - iOS SwiftUI 视频自动播放
- python - 为什么在 MacOS 上运行我的 python 脚本时出现 MKL 错误
- flutter - 如何将文件直接放在目录中?
- c++ - 将 constexpr 添加到语言后是否将变量声明为 const 多余?
- excel - VBA Excel:宏应在计时器到期后启动
- vuetify.js - v-combobox,奇怪的行为
- c - C代码并使接近零的负值为零
- reactjs - MaterialUI Appbar with Tabs - 它可以滚动和全角吗
- swift - 基于 Array<>.count 链接多个 Alamofire 请求