使用一个值减少列表的最佳方法是什么? [a] - >一个

时间:2017-01-17 12:41:07

标签: javascript

在一个项目中,我通常使用一个如下所示的列表:

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提供了有用的功能来处理过滤,缩小和映射等列表。我想知道我是否遗漏了使用filterreduce组合完成此任务的内容。事实上,我错过了find函数。

5 个答案:

答案 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);