2016-02-22 119 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]

相關問題