1

我有一个具有多个相等值的数组

[1,1,1,1,2,3,4,5,5,5,5,1,1,1,1,2,2,2,2,4,5,5,5,9,9 ,9.9]

我想要一种通过分隔相等值来获取新数组的方法。

例如,新数组的值将是 [1,1,1,1] [5,5,5,5] [1,1,1,1] [2,2,2,2] [5,5, 5] [9,9,9,9]

对于那些新数组,我必须在项目更改时找到索引。

这是我迄今为止尝试过的

indices = []; // fill with information when items in array change
arreglo = [1,1,1,1,2,3,4,5,5,5,5,1,1,1,1,2,2,2,2,4,5,5,5,9,9,9.9];
for ( u=0; u <= arreglo.length; u++){
            if ( arreglo[u] !=  arreglo[u + 1])
            indices.push(u);
            }

这个想法是找到最大数组的索引,然后在其中循环以创建新数组。

使用循环我会从 0 到索引 [0],然后从索引 [0] 到索引 [1] 等等。

它不能正常工作,有问题。有没有有效的方法来做到这一点?

更新:这不是家庭作业,它是为客户准备的网站。我在需要想法之前提出了一个问题:Selecting rows in table but could not make it with mysql 所以我决定使用 jQuery

{ 这是我正在使用的真实代码http://jsfiddle.net/U58jh/

在 jsfiddle 示例中,这很好用,但在使用来自 php 生成的页面的不同数据时并不总是如此。

脚本必须找到最后一个日期 (fecha) 与最后一个百分比 (Porcentaje final) 相等。}

4

4 回答 4

1

一个解法 :

//the result array, holding other arrays
var array_map = {};

var arreglo = [1,1,1,1,2,3,4,5,5,5,5,1,1,1,1,2,2,2,2,4,5,5,5,9,9,9.9];

for ( u=0; u <= arreglo.length; u++){

        //grab a number from the input array
        var item = arreglo[u];

        //get an object from array_map
        var indices = array_map[item];

        //if the object does not exist ...
        if (!indices) {
            indices = []; // ... create it ^^ ....
            array_map[item] = indices; //... and store it in the result.
        }

        //push the number into the object
        indices.push(item);
}

console.log(array_map);

你有一个错误: u 在你的循环中让你迭代索引,而不是值。

于 2012-04-27T19:07:04.400 回答
0

至于指数:

var prev = false,
    indeces = [];

for(var i=0; i<arreglo.length; i++){
    if(arreglo[i] !== prev){
        prev = arreglo[i];
        indices.push(i);
    }
}

...但是,这不会创建您单独的数组(但我也没有看到您正在尝试在代码中这样做)。

于 2012-04-27T19:08:43.557 回答
0
indices = []; // fill with information when items in array change
arreglo = [1,1,1,1,2,3,4,5,5,5,5,1,1,1,1,2,2,2,2,4,5,5,5,9,9,9,9];

array[0]=[]

for(var i = 0 ; i < arreglo.length ; i++ ){
 var value = arreglo[i]
 if (typeof(array[value]) == "undefined"){
  array[0].push(array[value])
  array[value]=[array[value]]
 }else{
  array[value].push(array[value])
 }
}

这将为您提供包含“桶”的哈希位置列表。array[0] 是您可以迭代的位置列表,然后在每个位置都有您的值桶..so

array[0][0] == 1
array[1] = [1,1,1,1,1,1,1,1]
array[0][1] == 2
array[2] = [2,2,2,2,2,2]
于 2012-04-27T19:45:47.173 回答
0

我认为在以前的版本中缺少某种数组。所以我的版本在下面。

此外,我想尽可能减少 IF 条件。

var arreglo = [1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 5, 1, 1, 1, 1, 2, 2, 2, 2, 4, 5, 5, 5, 9, 9, 9.9];
// First of all sort the array
arreglo.sort();
var outPutArray = [];
var arrLength = arreglo.length;
var tmpArray = []

for (var i = 1; i <= arrLength; i++) {
var tmpValue = arreglo[i];
var previousValue  =arreglo[i-1];

tmpArray.push(previousValue)

if (tmpValue != previousValue) {
        outPutArray.push(tmpArray);

        // The values are differents, so empty temp array
        tmpArray = [];
    }
}
于 2012-04-27T20:56:15.900 回答