Javascript 如何减少具有相似值的数字数组
我想创建一个方法,它接受一个数字列表,并可以通过提供的方差减少数组 解释的差异: 方差应与低于或高于的值相匹配。例如,100的方差等于5460的值,应该匹配5410-5510之间的任何值。低于相等值50,高于相等值50 例如,如果我有数组:Javascript 如何减少具有相似值的数字数组,javascript,arrays,Javascript,Arrays,我想创建一个方法,它接受一个数字列表,并可以通过提供的方差减少数组 解释的差异: 方差应与低于或高于的值相匹配。例如,100的方差等于5460的值,应该匹配5410-5510之间的任何值。低于相等值50,高于相等值50 例如,如果我有数组: [ 1576420754, 1576420756, 1576593554, 1581172759, 1581172764 ] 我想创建一个方法filterMilarValuesArray,方差=100 这将为我提供以下输出: [ 1576420756, 1
[ 1576420754, 1576420756, 1576593554, 1581172759, 1581172764 ]
我想创建一个方法filterMilarValuesArray,方差=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;
};
我想尝试一下:
const filterSimalarValues = (array, variance = 100) =>
array.reduce((acc, curr) => {
const variant = acc.find(
item => curr > item - variance / 2 && curr < item + variance / 2,
);
if (!variant) {
acc.push(curr);
} else {
acc[acc.indexOf(variant)] = curr;
}
return acc;
}, []);
此外,我认为您的问题应该更具体,有许多可能的边缘情况没有涵盖。根据提供的解释和我对差异的理解,您希望将数字限制在差异范围内。我假设您至少有2个元素,但您可以为该情况添加检查 常数filterSimalarValues=数组,方差=100=>{ 常量过滤器阵列=[]; filteredArray.pusharray[0];//要检查的基准点 对于let i=1;i
const filterSimilarValues = (array, variance = 100) => {
let filteredArray = [];
array.forEach(number => {
const start = number - (variance / 2);
const end = number + (variance / 2);
const range = Array(end - start + 1).fill().map((_, idx) => start + idx);
const found = range.some(r => filteredArray.includes(r))
if (!found) {
filteredArray.push(number);
}
});
return filteredArray;
};
使用Array.filter仅保留它们与下一个数字之间的绝对差Math.abs大于或等于方差/2的数字。默认情况下,最后一项i===Array.length-1
常数filterSimalarValues=数组,方差=100=>
array.filtern,i=>
i==array.length-1||
Math.absn-数组[i+1]>=方差/2
常量数据=[1576420754、1576420756、157659354、158172759、158172764]
const result=FiltersMalarValuesData
console.logresultplease分享您是如何尝试解决此问题的?您的问题是什么?这是一个算法问题,您的方差应该如何工作?当您有值:[10,12,13,14,15,16]和方差为5时,输出应该是什么?[10,16]或例如[13]?原始数组中的前两个值仅相差2 1576420754、1576420756,后两个值相差5 1581172759、1581172764,因此我只想为这些相似的值设置一个值。就像将它们视为重复值一样。您可能需要[10,16],但为什么,原因是什么,这样就可以为任何数组复制它?我已经更新了最后一项I===array.length-1的处理,因为如果数组[I+1]| |无穷大为0,则使用数组[I+1]会给出错误的结果。