Javascript Lodash orderBy-排序价格,开头带有$符号,如数字

Javascript Lodash orderBy-排序价格,开头带有$符号,如数字,javascript,lodash,Javascript,Lodash,我有一个对象数组: [{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语句不正确,所以我对数组进行了两次排序,第一次是数字,第二次

我有一个对象数组:

[{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语句不正确,所以我对数组进行了两次排序,第一次是数字,第二次是字符串

  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()]) })
  }

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

让arr=[{
id:1,
名称:“三星”,
价格:$937.78,
评级:4.5
}, {
id:1,
名称:“三星1号”,
价格:$97.78,
评级:4.5
}];
arr.sort((a,b)=>parseFloat(a.price.substring(1))-parseFloat(b.price.substring(1));

控制台日志(arr)对字符串使用
parseFloat

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

您还可以使用
regex
仅比较数值

let arr=[{id:1,名称:“三星”,价格:“937.78美元”,评级:4.5},
{id:2,名称:“三星”,价格:“37.78美元”,评级:4.5},
{id:3,名称:“三星”,价格:$222.78,评级:4.5},
];
arr.sort((a,b)=>a.price.match(/\d+\.\d+/)[0]-b.price.match(/\d+\.\d+/)[0]);

控制台日志(arr)切片后仍然是一个字符串。在item.price.slice(1)前面加一个加号:
+item.price.slice(1)
。你会得到其他货币的价格吗?因为它看起来像是在工作,那么100和97的价格呢?不是working@gruff-bunny+和parsefloat没有帮助显示更多数据,因为这将有助于给出正确答案。