在一个项目中,我通常使用一个如下所示的列表:
const listOfObjects = [{id: 1, selected: false}, {id: 2, selected: true}, ...]
我过滤所选对象的数组,如下所示:
const getSelectedObject = list => list.filter(ob => ob.selected);
所以我的代码看起来像这样:
const singleObjectList = getSelectedObject(listOfObjects);
singleObjectList
应该是包含单个元素的列表或者过滤器的空列表与任何值都不匹配。
然后我尝试获取列表的第一个值:
const fold = list => list.reduce((res, r) => r, null);
const ob = fold(singleObjectList)
折叠函数的结果可以是null
或列表中的最后一个值,如果列表有一个值[a],它将返回一个。
我觉得使用reduce有点不舒服。我想知道是否有更好/更清晰的方法从列表中获取单个值。
更新
解决方案是使用 Array.prototype.find
我得到了很大的帮助,有些人建议使用:
list[0]
虽然从技术上讲它提供了一个解决方案,但JavaScript提供了有用的功能来处理过滤,缩小和映射等列表。我想知道我是否遗漏了使用filter
和reduce
组合完成此任务的内容。事实上,我错过了find
函数。
答案 0 :(得分:2)
有什么问题
list[0]
?假设肯定有1个元素。
答案 1 :(得分:1)
对于包含第一项或=MID(B1,SEARCH("strong",B1)-4,(SEARCH("/strong",B1)-1)-(SEARCH("strong",B1)-4))
的结果,您可以使用逻辑OR null
获取||
值,而不是null
项目
undefined
或使用Array#find
。
var a = array[0] || null;
答案 2 :(得分:1)
试试这个
list.reverse().find(item => item.selected)
从列表中选择最后项{ selected: true }
删除第一个项目的reverse()
。
const list = [{id: 1, selected: false}, {id: 2, selected: true}]
const result = list.reverse().find(item => item.selected)
console.log(result)

答案 3 :(得分:1)
您可以尝试list.find(item => item.selected)
答案 4 :(得分:1)
您可以一步完成:
const listOfObjects = [{id: 1, selected: false}, {id: 2, selected: true}, ...]
const getSelected= list=>list.find(o=>o.selected);
let myObject=getSelected(listOfObjects);