从对象中获取实体的最佳方法是什么?

时间:2018-01-16 07:15:22

标签: javascript ecmascript-6

我不知道如何描述我的情况。如果问题标题不清楚,请帮我修改。

这是我的情况,我有这样的数据结构:

const medicineEntities = {
  1: {name: ''},
  2: {name: ''},
  3: {name: ''}
  ids: [1, 2],
  invalidIds: [3]
};

我使用es6 rest/spread运算符和Destructuring assignment

const { ids, invalidIds, ...medicines } = medicineEntities;

我只想使用medicines。但由于eslintidsinvalidIds会给我:

[eslint] 'invalidIds' is assigned a value but never used. (no-unused-vars)

我知道我可以禁用某些eslint规则,警告将会消失。

但我想知道如何在没有medicines的情况下获取for-loop

const medicines = medicineEntities.ids.map(id => medicineEntities[id]);

1 个答案:

答案 0 :(得分:2)

如果没有rest parameters ...,您可以将数组作为Object.assign的目标,并仅获取整数数字的键。

然后使用Boolean过滤数组以过滤稀疏元素。

Boolean用作Array#filter的回调并返回

  • falsy值,例如''0NaNundefinedfalsenull还有一些,或者

  • truthy值,如对象,非空字符串,每个数字,但不是零,true

在这种情况下,如果不需要undefined,则对象(不包含null)位于结果集中。

const
    medicineEntities = { 1: { name: '' }, 2: { name: '' }, 3: { name: '' }, ids: [1, 2], invalidIds: [3] },
    medicines = Object.assign([], medicineEntities).filter(Boolean);

console.log(medicines);
.as-console-wrapper { max-height: 100% !important; top: 0; }