javascript - 如何使用另一个数组获取对象数组中的值 - Javascript
问题描述
我有一个与 2 个数组交互的函数,第一个数组是一个包含我的下拉选项的对象数组,第二个数组是一个值数组。我正在尝试过滤第一个数组以返回与我的第二个数组中的值匹配的值。我如何实现这一目标?
第一个数组:
const books = [
{
label: "To Kill a Mockingbird",
value: 1
},
{
label: "1984",
value: 2
},
{
label: "The Lord of the Rings",
value: 3
},
{
label: "The Great Gatsby",
value: 4
}
]
代码片段如下:
const idString = "1,2,3";
function getSelectedOption(idString, books) {
const ids = idString.split(",");
const selectedOptions = [];
ids.map(e => {
const selected = books.map(options => {
if (options.value === e){
return {
label: options.label,
value: options.value
}
}
})
selectedOptions.push(selected)
})
return selectedOptions
}
结果:
[
[undefined, undefined, undefined, undefined],
[undefined, undefined, undefined, undefined],
[undefined, undefined, undefined, undefined]
]
预期结果:
[
{
label: "To Kill a Mockingbird",
value: 1
},
{
label: "1984",
value: 2
},
{
label: "The Lord of the Rings",
value: 3
}
]
解决方案
假设该值是唯一的,您可以按以下方式更新代码以使它们按顺序排列。
const idString = "1,2,3";
function getSelectedOption(idString, books) {
const ids = idString.split(",");
return ids.map(id => books.find(book => book.value == id)).filter(Boolean)
}
如果您不关心订单或如果value
不是唯一的,您还可以过滤书籍数组。
const idString = "1,2,3";
function getSelectedOption(idString, books) {
const ids = idString.split(",");
return books.filter(book => ids.includes(book.value.toString()))
}
请注意,这些是 O(n*m) 算法,不应该用于大型数据集,但是如果其中一个数组相对较小,您可以使用它。
推荐阅读
- google-cloud-platform - 创建 TPU 节点时的“IP 地址范围”是什么?
- python - 要创建一个系列,我的理解是否正确,它必须具有索引以及如何将数据框中的选定行转换为列表
- javascript - 导出函数以将参数和常量传递给另一个函数
- angular - CORS 拒绝 Cors 政策 (.WithOrigins) 中指定的白名单地址
- ruby-on-rails - 在“before_validation”回调错误代码中销毁持久记录?
- java - 通过命令行从 Java 类运行方法
- signalr - 是什么导致 SignalR WebSocketException - 到达文件末尾?
- python - 这个 python 代码试图对这个 numpy 数组做什么?
- ios - tableview不同的单元格在swift中有不同的高度
- javascript - 重新部署时看不到应用程序更改?