我有一个对象列表,我希望基于类型字符串的字段attr进行排序。我试着用
list.sort(function (a, b) {
return a.attr - b.attr
})
但发现-似乎不适用于JavaScript中的字符串。我如何能排序基于类型字符串的属性的对象列表?
我有一个对象列表,我希望基于类型字符串的字段attr进行排序。我试着用
list.sort(function (a, b) {
return a.attr - b.attr
})
但发现-似乎不适用于JavaScript中的字符串。我如何能排序基于类型字符串的属性的对象列表?
当前回答
嵌套三元箭头函数
(a,b) => (a < b ? -1 : a > b ? 1 : 0)
其他回答
应该有升序和降序函数
if (order === 'asc') {
return a.localeCompare(b);
}
return b.localeCompare(a);
按照你的例子使用String.prototype.localeCompare:
list.sort(function (a, b) {
return ('' + a.attr).localeCompare(b.attr);
})
我们强制a.attr为字符串以避免异常。从Internet Explorer 6和Firefox 1开始就支持localeCompare。你可能还会看到下面的代码不尊重区域设置:
if (item1.attr < item2.attr)
return -1;
if ( item1.attr > item2.attr)
return 1;
return 0;
这里应该使用>或<和==。所以解决方案是:
list.sort(function(item1, item2) {
var val1 = item1.attr,
val2 = item2.attr;
if (val1 == val2) return 0;
if (val1 > val2) return 1;
if (val1 < val2) return -1;
});
var str = ['v','a','da','c','k','l']
var b = str.join('').split('').sort().reverse().join('')
console.log(b)
为什么问题中的方法不起作用的解释:
let products = [
{ name: "laptop", price: 800 },
{ name: "phone", price:200},
{ name: "tv", price: 1200}
];
products.sort( (a, b) => {
{let value= a.name - b.name; console.log(value); return value}
});
> 2 NaN
字符串之间的减法返回NaN。
附和@Alejadro的回答,正确的方法是——
产品。排序(a,b) => a。一、二、三)