我有一个阵列
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];
任何人都可以为此建议动态解决方案吗?
您可以检查结果集中是否包含前一个元素或下一个元素。
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]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
你可以尝试以下
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);
由于您期望恰好4个具有特定位置的数字,您可以通过它们彼此之间的关系来确定每个数字。
const master = [0, 2, 4, 6, 8, 10];
const result = [4, 5, 6];
const arrayA = [0, 3, 6, 9, 12];
const array1 = [2, 4, 6, 8];
const arrayB = [1, 2, 3, 4, 5, 6, 7, 8];
const array2 = [5];
function getIndices(minor, major) {
const merged = Array.from(new Set([...minor, ...major])).sort(function(a, b) {
return a - b
});
//console.log(merged);
const min = minor[0];
const max = minor[minor.length - 1];
const prev = merged[merged.indexOf(min) - 1];
const next = merged[merged.indexOf(max) + 1];
const final = min === max ? [prev, min, next] : [prev, min, max, next];
return final;
}
console.log(`The indices of result and master are: [${getIndices(result, master)}]`);
console.log(`The indices of array1 and arrayA are: [${getIndices(array1, arrayA)}]`);
console.log(`The indices of array2 and arrayB are: [${getIndices(array2, arrayB)}]`);