我想了解如何在功能上解决这个问题(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来解决这个问题。谢谢!
答案 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。
已编辑:现在它可以正常工作,如果你要求下一个最后一个元素,它会先返回。