有2个数组data1
和data2
。所需的结果是一个包含 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/