javascript - 如何从具有索引的对象中获取数组作为对象属性之一
问题描述
我有一个对象
const items = {
"123": {
"key": 123,
"name": "one name",
},
"456": {
"key": 456,
"name": "two name",
},
"789": {
"key": 789,
"name": "three name",
},
};
需要从下面的数组中过滤这个,数组索引为 object.key
const myFilter = [123,789];
我正在尝试的代码如下,但它返回数组 inedx 为 0,1,2 ...但我需要索引为 object.key。
let selectedItems = myFilter.map((key) => {
return items[key];
});
电流输出:
[0:{
key: 123,
name: "one name"
}, 1: {
key: 789,
name: "three name"
}]
预期产出
[123:{
key: 123,
name: "one name"
}, 789: {
key: 789,
name: "three name"
}]
jsfiddle - https://jsfiddle.net/kb374exh/2/
解决方案
您的实际输出实际上是正确的,并且是将myFilter
数组映射到匹配属性的唯一可能结果items
。
const items = {
"123": {
"key": 123,
"name": "one name",
},
"456": {
"key": 456,
"name": "two name",
},
"789": {
"key": 789,
"name": "three name",
},
};
const myFilter = [123, 789];
const selectedItems = myFilter.map((key) => items[key]);
console.log(selectedItems);
您看到的记录输出包括数组索引。您可能会在登录浏览器时看到包含的索引。
如果您想要一个原始键是新索引的对象数组,那么您可能做的最好的事情就是一个长度为 <highest key> 的数组和一堆根本未定义的“洞”。
const items = {
"123": {
"key": 123,
"name": "one name",
},
"456": {
"key": 456,
"name": "two name",
},
"789": {
"key": 789,
"name": "three name",
},
};
const myFilter = [123, 789];
const selectedItems = Object.entries(items).reduce((selectedItems, [key, value]) => {
if (myFilter.includes(value.key)) selectedItems[key] = value;
return selectedItems;
}, []);
console.log(selectedItems);
如果你对结果是一个对象感到满意,那么你可以得到更简洁的输出,你基本上会得到一个过滤掉键值对的对象。
const items = {
"123": {
"key": 123,
"name": "one name",
},
"456": {
"key": 456,
"name": "two name",
},
"789": {
"key": 789,
"name": "three name",
},
};
const myFilter = [123, 789];
const selectedItems = Object.fromEntries(Object.entries(items).filter(([, value]) => myFilter.includes(value.key)));
console.log(selectedItems);
推荐阅读
- c# - 使用 NATS 消息的大延迟
- nested-lists - Elm:如何在嵌套列表上应用 List.map
- python - Django Rest Framework:按序列化程序方法字段排序
- java - 反应式处理:具有预取和有序消费者的异步 IO 生产者(MWE 提供)(java Project Reactor 3.x)
- c# - 构建大文件文本编辑器
- php - @attributes 索引在一台服务器上的 xml 对象中丢失,而相同的输入它存在于其他服务器 PHP
- javascript - 取消订阅角度
- docker - Docker 网络在容器重启时影响主机网络:chrome 中的 ERR_NETWORK_CHANGED
- java - JPQL 查询中的“ORDER BY”将“CROSS JOIN”添加到生成的 sql 中,从而减少最终结果
- scala - 尝试理解 Kafka Scala 语法