2016-02-22 58 views
1

我有具有多个对象的数组:如何更新Javascript中对象数组中每个对象的值?

[ {col:1} {col:1} {col:1} {col:3} {col:3} {col:9} {col:12} {col:13} ] 

我想更新该阵列,使得具有COL值1将保持不变,而将下一个值(此处为3)应该成为2,然后下一个值(在此9 )应该成为3等..

O/P:

[ {col:1} {col:1} {col:1} {col:2} {col:2} {col:3} {col:4} {col:5} ] 

请帮助。

+2

做最后订单的事吗?你还试过了什么?如果你表现出努力,将得到更好的回应 – charlietfl

+0

是的,最终的顺序很重要。我尝试创建数组值,然后改变每个值,但它都变得混乱。 –

+0

输入数组是否保证按'.col'排序? – Bergi

回答

3

这里一个相当简单的方法:

var arr = [ {col:1}, {col:1}, {col:1}, {col:3}, {col:3}, {col:9}, {col:12}, {col:13} ]; 
 
var current = 0; 
 
var prevEl = -1; 
 

 
for (var i = 0; i < arr.length; i++) { 
 
    var el = arr[i].col; 
 
    arr[i].col = el > prevEl ? ++current : current; 
 
    prevEl = el; 
 
} 
 

 
console.log(arr);

1

您可以减少阵列:

var data = [ 
    { col: 1 }, { col: 1 }, 
    { col: 1 }, { col: 3 }, 
    { col: 3 }, { col: 9 }, 
    { col: 12 }, { col: 13 } 
]; 

var result = data.reduce(function(r, i) { 
    r.previous !== i.col && r.newValue++; 
    r.previous = i.col; 
    r.arr.push({ col: r.newValue }); 
    return r; 
}, {arr: [], newValue: 0}).arr; 

console.log(result); 

我想你的阵列是由col排序,否则你必须先解决它。

-1

您可以运行for循环遍历数组,并让if子句检查某些值;说数组对象被称为myArray

var myArray = [ {col:1} {col:1} {col:1} {col:3} {col:3} {col:9} {col:12} {col:13} ]; 

for (var i = 0; i < myArray.length; i++){ 
    if (myArray[i] === 3){ 
     myArray[i] = 2; 
    } 
    // and so on..... 
} 
+0

为什么倒票?它可能不是100%灵活的,但是对于这种情况我没有看到问题。 – thefromanguard

+2

输入数组可能每次都不一样 – mjr

+2

'myArray [i]'是一个对象。概念也不会根据值的填补进行调整,并且绝对不可扩展。创建你自己的演示会看到问题出现,然后 – charlietfl

1

应该做什么是需要的。不依赖于原数组任何特定的顺序,并假定总是以1

var data=[ {col:1} ,{col:1} ,{col:1} ,{col:3} ,{col:3}, {col:9} ,{col:12} ,{col:13} ]; 
 

 
var uniqueValues = data.reduce(function(a,c){ 
 
    if(a.indexOf(c.col)===-1) { 
 
     a.push(c.col); 
 
    } 
 
    return a; 
 
},[]).sort(function(a,b){ 
 
    return a-b; 
 
}); // produces [1,3,9,12,13] 
 

 
var res=data.map(function(item){ 
 
    // use index of current col value from unique values .. plus one 
 
    item.col=uniqueValues.indexOf(item.col) + 1; 
 
    return item; 
 
}); 
 

 
document.getElementById('pre').innerHTML = JSON.stringify(res,null,4)
<pre id="pre">

编辑开始:如果最低山坳不1仍然可以使用uniqueValues.indexOf(item.col) + uniqueValues [0]

相关问题