首页 > 解决方案 > 如何从具有索引的对象中获取数组作为对象属性之一

问题描述

我有一个对象

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/

标签: javascriptarraysecmascript-6filterreducers

解决方案


您的实际输出实际上是正确的,并且是将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);


推荐阅读