Home > Software design >  Javascript Array - Create Map with items within a tolerance
Javascript Array - Create Map with items within a tolerance

Time:01-27

Take the following Javascript Array:

["21587569", "21587570", "21587572", "31856855", "31856854"]

You can visually see that the first 3 items are within a limit of 5 of any other item in that "group", the same can be said for the items at index 3 & 4.

How can I group these "similar" items using Javascript array functions, such as the following output array?

[{"21587569", "21587570", "21587572"},{"31856855", "31856854"}]

The items may not always be presented in order as they are in the example input array.

CodePudding user response:

You could sort and get groups if the delta of last items is smaller than five.

const
    data = [21587569, 21587570, 21587572, 31856855, 31856854],
    result = [...data]
        .sort((a, b) => a - b)
        .reduce((r, v) => {
            const last = r[r.length - 1];
            if (!last || v - last[last.length - 1] > 5) r.push([v]);
            else last.push(v);
            return r;
        }, []);

console.log(result);
    

  •  Tags:  
  • Related