通过其他数组查找数组中最接近的值

时间:2018-05-11 06:53:54

标签: javascript arrays

我有一个数组

var master = [0,2,4,6,8,10];

我有另一个数组

var result = [4,5,6];

我需要根据结果数组过滤主数组,它应该像下面的

一样返回
var finalmaster = [2,4,6,8];

因为4,5,6是主数组中2到8之间的界限

我尝试了类似下面的内容

var min = Math.min(result); 
var max = Math.max(result); 
var temp = [];
for(i=0;i<master.length;i++) {
 if(master[i]>=min && master[i]<=max) {
  temp.push(master[i]);
 }
}

var temp = [4,6];

但我需要相邻的一个值,临时应该看起来像

var temp = [2,4,6,8];

有人可以为此建议动态解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以检查结果集中是否包含前一个元素或下一个元素。

&#13;
&#13;
function getValues(master, values) {
    return master.filter(
        (m, i, a) =>
            a.slice(Math.max(0, i - 1), i + 2).some(v => values.includes(v)) ||
            values.some(v => v > a[i - 1] && v < m || v > m && v < a[i + 1])
        );
}

console.log(getValues([0, 2, 4, 6, 8, 10], [4, 5, 6]));
console.log(getValues([0, 2, 4, 6, 8, 10], [5]));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以尝试以下

var master = [0,2,4,6,8,10];
var result = [4,5,6];

master.sort((a,b) => a-b); // Sort your array

var temp = [];
// find min and max of result
var min = Math.min(...result); 
var max = Math.max(...result); 
 
for(i=0;i<master.length;i++) {
  var item = master[i];
  if(item >= min && item <= max) { // if falls in range push
    temp.push(item);
  } else if (item <  min) { // if less than min, always set to first in array
    temp[0] = item;
  } else if (item >  max) { // if greater than than max, push to array and exit
    temp.push(item);
    break;
  }
}

console.log(temp);