Javascript 如何创建一个包含其他值的值数组?
我正在用javascript编写一个脚本,我必须做一些事情来读取一个数字数组并返回一个唯一的数组,该数组包含“englobes”值。我拥有的数组如下所示:[100200500600150250] 两个值成对出现。这就像是A:100-200,B:500-600,C:150-250 在图像中,它看起来像这样。(请原谅我在MS Paint上画的这幅平庸的画) 所以基本上,我想要的是粉红线。生成的数组将是[100250500600]Javascript 如何创建一个包含其他值的值数组?,javascript,html,arrays,web,merge,Javascript,Html,Arrays,Web,Merge,我正在用javascript编写一个脚本,我必须做一些事情来读取一个数字数组并返回一个唯一的数组,该数组包含“englobes”值。我拥有的数组如下所示:[100200500600150250] 两个值成对出现。这就像是A:100-200,B:500-600,C:150-250 在图像中,它看起来像这样。(请原谅我在MS Paint上画的这幅平庸的画) 所以基本上,我想要的是粉红线。生成的数组将是[100250500600] 我希望这足够清楚。首先,我要重新格式化数组 [100, 200, 5
我希望这足够清楚。首先,我要重新格式化数组
[100, 200, 500, 600, 150, 250]
变成更明确的东西,例如
[ {'start':100, 'end':200}, {'start':500, 'end':600}, {'start':150, 'end':250} ]
这显然是一系列的间隔。现在,这里有一个易于编码但效率不高的解决方案:
对于数组中的每对间隔,检查它们是否重叠(即,一个间隔的“开始”在另一个间隔的“开始”和“结束”之间,或者一个间隔的“结束”在另一个间隔的“开始”和“结束”之间)。如果它们重叠,则从数组中删除两个间隔,并将其替换为新的组合间隔(新间隔的“开始”等于两个间隔开始的最小值,“结束”等于两个间隔结束的最大值)
重复此过程,直到在数组的所有对中迭代一次,而不会使数组变短。您完成了。这是一个非常常见的问题
var array = [100, 200, 500, 600, 150, 250], temp = [], result = [];
// Group the array in proper ranges
for (var i = 0; i < array.length; i += 2) {
temp.push([array[i], array[i + 1]]);
}
console.log(temp);
# [ [ 100, 200 ], [ 500, 600 ], [ 150, 250 ] ]
// Sort the array based on the first starting number of the range
temp.sort(function(first, second) {
return first[0] - second[0];
});
console.log(temp);
# [ [ 100, 200 ], [ 150, 250 ], [ 500, 600 ] ]
// Push the First range in the result
result.push(temp[0]);
// See the `explanation` below
for (var i = 1; i < temp.length; i += 1) {
var top = result[0], cur = temp[i];
if ((cur[0] < top[0] && cur[1] >= top[0]) || (cur[0] < top[1])) {
result[0] = [Math.min(cur[0], top[0]), Math.max(cur[1], top[1])];
} else {
result.splice(0, 0, cur);
}
}
console.log(result);
# [ [ 500, 600 ], [ 100, 250 ] ]
// Now, flatten the data and sort.
console.log([].concat.apply([], result).sort());
# [ 100, 250, 500, 600 ]
var数组=[100200500600150250],temp=[],result=[];
//将数组按适当的范围分组
对于(变量i=0;i=top[0])| |(cur[0]
解释
对于temp
中的每个元素,检查其是否在第一个元素的范围内
结果的元素
。基本上,我们将使用result
作为堆栈。
如果当前范围与结果的顶部重叠,则更换
结果的顶部
包含两个元素的范围请发布您尝试的代码。我会的,但到目前为止我没有任何有意义的内容,抱歉!你试过什么??发布一些代码..我尝试了你的版本,并把它与我的代码,它的工作!非常感谢你,我已经在这里呆了好几天了。这很难理解,我会多读一些来完全理解它。再次感谢!