我有一个具有几个相等值的数组
[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]等等。
它无法正常工作,有问题。有没有有效的方法来做到这一点?
更新:这不是家庭作业,而是针对客户的网站。我在Need ideas: Selecting rows in table之前提出了一个问题但是无法使用mysql,所以我决定使用jQuery
{ 这是我正在使用http://jsfiddle.net/U58jh/
的真实代码在jsfiddle示例中,这是有效的,但并不总是在使用php生成的页面中使用不同的数据时。
脚本必须找到最后的日期(fecha)和最终的百分比(Porcentaje final)iquals。 }
答案 0 :(得分: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);
你有一个错误:你在循环中使你迭代索引,而不是值。
答案 1 :(得分:0)
至于指数:
var prev = false,
indeces = [];
for(var i=0; i<arreglo.length; i++){
if(arreglo[i] !== prev){
prev = arreglo[i];
indices.push(i);
}
}
...但是,这不会创建单独的数组(但我不会在您的代码中看到您尝试这样做)。
答案 2 :(得分: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]是您可以迭代的位置列表,然后在每个位置都有您的值桶。所以
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]
答案 3 :(得分: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 = [];
}
}