我有以下三元:
exceptionType == 'Asset' ? selection = selectedAssets.find(function(obj) {return obj.fixedTitle === element}) : selection = dedupedAssets.find(function(obj) {return obj.fixedTitle === element});
我有条件地将变量selection
分配给find()
返回的值。这些功能极其相似,唯一的区别是目标数组。
有没有办法进一步缩短?
答案 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,然后返回dedupedAssets
,true
将转换为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'));