给定一个元素和一个列表,如何在列表中功能性地选择元素?

时间:2015-07-17 23:49:14

标签: javascript functional-programming

我想了解如何在功能上解决这个问题(map / reduce / etc)

说我有一个对象列表(我现在正在使用javascript工作):

l = [ {id: 43}, {id: 64}, {id: 12} ] 

我想要一个函数f,它给出列表中的下一个元素。

f(l, {id:64}) => {id:12}) 

f(l, {id:12}) => {id:43}

我理解如何解决这个问题,但我很难看到如何使用map / reduce来解决这个问题。谢谢!

3 个答案:

答案 0 :(得分:2)

不考虑元素是集合中的最后一项,或者不在集合中:

function findNext(collection, element) {
    var current = collection.indexOf(element);

    return collection[current + 1];
}

我不知道减少或地图会如何使这更好。除非你想传入一个id,而不是传入集合中的一个对象。然后是:

function findNext(collection, id) {
    var current = collection.map(function (e) { return e.id }).indexOf(id);

    return collection[current + 1];
}

第一个版本,在jsfiddle中工作:https://jsfiddle.net/cfxovfge/

答案 1 :(得分:1)

请尝试以下代码:

ignoreFailures = false
reportLevel = "low"

答案 2 :(得分:-2)

var f = function(arr, element) {
  for (var i=0, l=arr.length; i<l; i++) {
    if (arr[i].id === element.id) {
      return arr[(i+1)%arr.length];
    }
  }
};

如果无法找到元素,则返回undefined。

已编辑:现在它可以正常工作,如果你要求下一个最后一个元素,它会先返回。