javascript - 查找一个数组中比另一个数组中的元素大的元素

标签 javascript jquery regex underscore.js

有2个数组data1data2 。所需的结果是一个包含 data1 中所有元素的数组。大于 data2 中的最大元素[+ 变量 buffer 中定义的前面的 3 ]。 换句话说,结果还应该包含data1中的前3个元素位于匹配元素之前。 两个数组均已按升序排序。

下面的代码可以满足要求,但是有更好的方法来做同样的事情吗?正则表达式会更快吗?

数据集

data1 = [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]
data2 = [102, 104, 106, 108]
buffer = 3

期望的结果是 [106, 107, 108, 109, 110]

算法

largestData2 = _.max(data2)
data1LargerThanData2 = _.filter(data1, function(data1) {
    return data1 > largestData2
})
smallestData1LargerThanData2 = _.min(data1LargerThanData2)

sliceStart = data1.indexOf(smallestData1LargerThanData2) - buffer
result = data1.slice(sliceStart)

最佳答案

首先获取data2中的最大值:

var max = Math.max.apply(null, data2);

然后从data1中获取所有大于max的数字:

var arr = data1.filter(function (el) {
  return el > max;
});

使用arr中第一个值的值在data1中找到我们的起点,并从中获取适当的元素 block 。

var index = data1.indexOf(arr[0]) - 3;
var chunk = data1.slice(index, index + 3);

arr合并到chunk中。

chunk.push.apply(chunk, arr); // chunk = [106, 107, 108, 109, 110]

Demo .

关于javascript - 查找一个数组中比另一个数组中的元素大的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21167093/

相关文章:

c# - 将 String.Replace 替换为 Regex.Replace

javascript - 我如何为返回的 Json 动态创建 ajax 链接

javascript - HTML 属性中是否允许使用 HTML?

javascript - 如何在 JS 或 jQuery 中打印数组的字段

javascript - Twitter Bootstrap - 如何检测媒体查询何时开始

r - 在 R 中使用正则表达式从文件名中提取模式?

javascript - Jquery 自动完成 - 不要用结果填充输入框

javascript - 使用 Chart.js 将 JSON 数据绘制到图表上

php - 通过 javascript 添加金额的 onclick 函数

python - 使用正则表达式从字符串中删除数字