有条件地使用对象属性

时间:2019-03-18 18:45:13

标签: javascript

我有以下三元:

exceptionType == 'Asset' ? selection = selectedAssets.find(function(obj) {return obj.fixedTitle === element}) : selection = dedupedAssets.find(function(obj) {return obj.fixedTitle === element});

我有条件地将变量selection分配给find()返回的值。这些功能极其相似,唯一的区别是目标数组。

有没有办法进一步缩短?

2 个答案:

答案 0 :(得分:4)

您可以使用三元运算符来了解要迭代的项目,并使用逻辑运行一次而不是复制它。

const itemsToIterate = exceptionType == 'Asset' ? selectedAssets : dedupedAssets;

const items = itemsToIterate.find(function(obj) {return obj.fixedTitle === element});

您可以对此进行一些调整以使其更短。

const itemsToIterate = exceptionType == 'Asset' ? selectedAssets : dedupedAssets;

const items = itemsToIterate.find(({ fixedTitle }) => fixedTitle === element);

答案 1 :(得分:1)

您可以使用布尔条件作为索引来获取正确的数组以将find应用于:

const selection = [dedupedAssets, selectedAssets][+(exceptionType === 'Asset')]
  .find(o => o.fixedTitle === element);

使用运算符+false将转换为0,然后返回dedupedAssetstrue将转换为1,selectedAssets返回。

索引示例

const a = [{ title: 'hello' }];
const b = [{ title: 'world' }];

console.log([a, b][+false].find(o => o.title === 'hello'));
console.log([a, b][+true].find(o => o.title === 'world'));