2017-07-17 59 views
0

開始我有對象的數組:

[{id:1, name:"Samsung", price :"$937.78", rating :4.5}, ..] 

當我按價格排序排序它作爲一個字符串。我試圖拼接$符號,但它不起作用 - 它排序爲一個字符串。

orderBy(this.props.price_list, item => item.price.slice(1), [sortDir.toLowerCase()]) 

P.S. 很抱歉的是,我並沒有注意到if statement是不正確的,所以我正在整理陣兩次,第一次爲一個號碼,第二作爲一個字符串

sortTable(sortDir = 'ASC', columnName) { 

    if (columnName === 'price'){ 
     this.setState({ list: orderBy(this.props.price_list, item => parseFloat(item.price.slice(1)), [sortDir.toLowerCase()]) }) 
    } 
    this.setState({ list: orderBy(this.props.price_list, [columnName], [sortDir.toLowerCase()]) }) 
    } 
+0

它仍然是切片後的字符串。在item.price.slice(1)之前加上一個加號:'+ item.price.slice(1)'。 –

+0

你會得到任何其他貨幣的價格?因爲它看起來像工作https://codepen.io/kejt/pen/RgOqXY?editors=1111 – Kejt

+0

價格100和97呢?它不起作用 –

回答

0

在字符串中使用parseFloat

orderBy(this.props.price_list, item => parseFloat(item.price.slice(1)), [sortDir.toLowerCase()]) 
+0

我試過..,好的,我會再試一次 –

0

只需使用parseFloat() - > item.price .substring(1):

let arr = [{ 
 
    id: 1, 
 
    name: "Samsung", 
 
    price: "$937.78", 
 
    rating: 4.5 
 
}, { 
 
    id: 1, 
 
    name: "Samsung1", 
 
    price: "$97.78", 
 
    rating: 4.5 
 
}]; 
 
arr.sort((a, b) => parseFloat(a.price.substring(1)) - parseFloat(b.price.substring(1))); 
 
console.log(arr);

1

您也可以使用regex來比較數字值。

let arr = [{id:1, name:"Samsung", price :"$937.78", rating :4.5}, 
 
    {id:2, name:"Samsung", price :"$37.78", rating :4.5}, 
 
    {id:3, name:"Samsung", price :"$222.78", rating :4.5}, 
 
]; 
 

 
arr.sort((a,b) => a.price.match(/\d+\.\d+/)[0] - b.price.match(/\d+\.\d+/)[0]); 
 

 
console.log(arr);