2017-07-17 63 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);