Javascript 如何创建一个包含其他值的值数组?

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

我正在用javascript编写一个脚本,我必须做一些事情来读取一个数字数组并返回一个唯一的数组,该数组包含“englobes”值。我拥有的数组如下所示:[100200500600150250]

两个值成对出现。这就像是A:100-200,B:500-600,C:150-250

在图像中,它看起来像这样。(请原谅我在MS Paint上画的这幅平庸的画)

所以基本上,我想要的是粉红线。生成的数组将是[100250500600]


我希望这足够清楚。

首先,我要重新格式化数组

[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
作为堆栈。 如果当前范围与
结果的顶部重叠,则更换

结果的顶部
包含两个元素的范围

请发布您尝试的代码。我会的,但到目前为止我没有任何有意义的内容,抱歉!你试过什么??发布一些代码..我尝试了你的版本,并把它与我的代码,它的工作!非常感谢你,我已经在这里呆了好几天了。这很难理解,我会多读一些来完全理解它。再次感谢!