2017-01-31 24 views
0
var testArray = [{ 
    value: john, 
    count: 5 
}, 
{ 
    value: henry, 
    count: 2 
}, 
{ 
    value: bill, 
    count: 10 
}] 

testArray.map(function(value) { 
    //otherfunctions 
}) 

所以我有一個函數,我已經映射通過類似於上述對象的數組。我想根據計數向排名對象添加第三個值。 我目前的想法是完成我的地圖,我已經在做,然後根據計數重新排序數據,然後根據排序的位置在數組中分配一個排名。但是,由於我已經在映射數組,所以這似乎很長時間了。排序雖然通過數組循環javascript

+0

是原始數組的種類嗎? - 以上是不是... –

+0

爲什麼這似乎很長時間以來縈繞在你身上?我會添加添加值到數組中,使用'map()'函數,並使用sort()'來度量它,其中傳遞一個函數來比較計數值。 –

+0

原來根本沒有排序。看起來很長,因爲我已經在映射這個數組了。如果這樣做有意義,那麼運行兩張地圖似乎很長時間? –

回答

1

香草JS:

var testArray = [{ 
    value: john, 
    count: 5 
}, 
{ 
    value: henry, 
    count: 2 
}, 
{ 
    value: bill, 
    count: 10 
}] 

let newArray = testArray.map(function(item) { 
    return { 
    value: item.value, 
    count: item.count, 
    newProperty: 'x' 
    } 
}).sort(function(x, z) { 
    return x.count - z.count; 
}); 

ES6:

let newArray = testArray 
.map(item => { 
    return { 
    ...item, 
    newProperty: 'x' 
    } 
}).sort((x, z) => x.count - z.count); 

附:這是做這種計算的功能方式,應該有一個o(n * nlog n)的時間,你可以用一個命令式的方法在o(n)中做到這一點,但是在我看來這更容易閱讀/理解。

編輯1 後從筆者點評:希望當前計添加到項目(想不出哪裏,這將是必要的情況下),但只是沉迷:

let newArray = testArray 
.map((item, index) => { 
    return { 
    ...item, 
    currentCount: index 
    } 
}).sort((x, z) => x.count - z.count); 

瞭解更多map

+0

謝謝,這是我想要做的99%,並且完全合理。然而,我想要做的就是擁有你所擁有的newProperty:'x',我希望與每個對象的計數值有關係。因此在這種情況下x值將是2,3,1(按計數順序)。那有意義嗎? –

+0

爲了達到這個目的,你希望每個對象都是:{value:bill,count:10,newProperty:[2,3,1]}或者你只想得到[2,3,1]值迭代之後? – ospfranco

+0

不,我希望每個對象都是{value:bill,count:10,newProperty:1},其中新屬性與計數相關。因此,該法案將有一個newProperty爲1,約翰將有一個2的newProperty和3亨利。 –