Skip to content

Instantly share code, notes, and snippets.

@marcog83
Last active November 7, 2019 12:13
Show Gist options
  • Save marcog83/d52e08fcaa918b435c68 to your computer and use it in GitHub Desktop.
Save marcog83/d52e08fcaa918b435c68 to your computer and use it in GitHub Desktop.
chunk array elements over a predicate function
var data = [1, 2, 3, 13, 5, 6, 7, 8, 9, 10, 11];
var predicate = element => element % 2 === 0;
function chunk(predicate, data) {
return data.map(predicate).reduce((prev, curr, i, arr) => {
if (curr) {
if (prev.length) {
let first = prev[prev.length - 1][1];
prev.push([first, i + 1]);
} else {
prev.push([0, i + 1]);
}
} else if (!curr && (i === arr.length - 1)) {
let first = prev[prev.length - 1][1];
prev.push([first, i + 1]);
}
return prev;
}, []).map(([first, last]) => data.slice(first, last));
}
const r=chunk(predicate, data);
console.log(r);
@marcog83
Copy link
Author

marcog83 commented Jul 9, 2015

function chunk(predicate, data) {
    return data.reduce(function (prev, curr, i, arr) {
        var t=predicate(curr)
        if (t) {
            var first = prev.length?prev[prev.length - 1][1]:0;
            prev.push([first, i + 1]);
        } else if (!t && (i == arr.length - 1)) {
            var first = prev[prev.length - 1][1];
            prev.push([first, i + 1]);
        }
        return prev;
    }, []).map(function (indexes) {
        var first = indexes[0];
        var last = indexes[1];
        return data.slice(first, last);
    });
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment