首页 > 解决方案 > 如何减少具有相似值的数字数组

问题描述

我想创建一个采用数字列表并可以通过提供的方差来减少数组的方法。

差异解释:

方差应匹配低于和高于的值。例如,100 的方差等于值:5460 应该匹配 5410 - 5510 之间的任何值。(50 低于等值值,50 高于 50)

例如,如果我有数组:

[ 1576420754, 1576420756, 1576593554, 1581172759, 1581172764 ]

我想创建一个方法filterSimilarValues(array, variance = 100)

这会给我以下输出:

[ 1576420756, 1576593554, 1581172764 ]

我尝试了几件事,比如

const filterSimalarValues = (array, variance = 100) => {
    let filteredArray = [];

    for (let i = 0; i < array.length; i++) {
        const number = array[i];

        if (number >= number - (variance / 2) && number <= number + (variance / 2)) {
            return;
        }

        filteredArray.push(number);
    }

    return filteredArray;
};

标签: javascriptarrays

解决方案


用于Array.filter()仅保留Math.abs()它们与下一个数字之间的绝对差 () 大于或等于的数字variance / 2i === array.length - 1默认情况下包括最后一项 ( )。

const filterSimalarValues = (array, variance = 100) => 
  array.filter((n, i) => 
    i === array.length - 1 ||
    Math.abs(n - array[i + 1]) >= variance / 2
  )

const data = [1576420754, 1576420756, 1576593554, 1581172759, 1581172764]

const result = filterSimalarValues(data)

console.log(result)


推荐阅读