好,所以我们有一些代码可以正常工作,并且可以在节点10上通过测试,现在升级到节点11之后,该代码现在无法通过单元测试。代码在更改属性的对象数组上进行映射,然后根据字符串名称值进行排序,即array.sort(a,b)=> a.toLowerCase()> b.toLowerCase()。
现在它可以正确映射,但是排序不起作用,并且仅在不进行排序的情况下返回映射的数组,当我尝试将两个函数拆分为单独的映射,然后对排序进行排序时,返回的结果不确定。
已经研究并尝试找到一些示例,以查看需要更改哪些内容,但除了在v8中将排序算法更改为timsort的建议外,并未找到很多建议。
简单代码
Route::post('memberform/changePassword','MemberController@changePassword')->name('changePassword');
测试数组:
export default places => places
.map(place => ({
value: place.properties.code, label: place.properties.name
}))
.sort((placeA, placeB) => placeA.label.toLowerCase() >
placeB.label.toLowerCase())
预期结果
type: 'Place',
properties: {
code: 'CA076757',
name: 'Brockway'
}
}, {
type: 'Place',
properties: {
code: 'MN486464',
name: 'Ogdenville'
}
}, {
type: 'Place',
properties: {
code: 'S4889785',
name: 'North Haverbrook'
}
}]
实际结果
{value: 'CA076757', label: 'Brockway'},
{value: 'S4889785', label: 'North Haverbrook'},
{value: 'MN486464', label: 'Ogdenville'}
]
答案 0 :(得分:2)
我们有一些可以在节点10上正常运行并通过测试的代码,现在升级到节点11之后,该代码现在无法通过单元测试
直言不讳,这意味着您的测试没有提供足够的覆盖范围;-)
在JavaScript中,cmp(a, b)
的比较器函数Array.sort
应该返回:
a
小于b
的值小于零a
等于b
则为零a
大于b
,则该值大于零如果使用返回布尔值的比较器函数,则false
将静默映射到0
,而true
将静默映射到1
。没有办法表示a < b
情况。如果您的测试用例无论如何都能正确排序,那么它们就不会涵盖该案例。
对于您的示例而言,无论您使用的是哪个Node版本或哪个浏览器,合适的比较器功能都是:
(placeA, placeB) => {
let a = placeA.label.toLowerCase();
let b = placeB.label.toLowerCase();
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
答案 1 :(得分:0)
您可以使用localeCompare
:
(lldb) br s -f Board.cpp -l 27 -c 'prob==0.1'
输出:
geom_hline(yintercept=Mean1, size = .8,linetype="dotdash")
答案 2 :(得分:0)
根据我对Sort array of objects by string property value的回答,以下方法是一种在string locales不重要时对字符串进行排序的足够方法:
const sortBy = fn => (a, b) => {
const fa = fn(a)
const fb = fn(b)
return -(fa < fb) || +(fa > fb)
}
const sortByLabelCaseInsensitive = sortBy(
place => place.label.toLowerCase()
)
const fn = places => places.map(place => ({
value: place.properties.code,
label: place.properties.name
})).sort(sortByLabelCaseInsensitive)
const array = [{
type: 'Place',
properties: {
code: 'CA076757',
name: 'Brockway'
}
}, {
type: 'Place',
properties: {
code: 'MN486464',
name: 'Ogdenville'
}
}, {
type: 'Place',
properties: {
code: 'S4889785',
name: 'North Haverbrook'
}
}]
console.log(fn(array))
答案 3 :(得分:0)
尝试这个
.sort((placeA, placeB) => {
if(placeA.label.toLowerCase() < placeB.label.toLowerCase()) return -1
if(placeA.label.toLowerCase() > placeB.label.toLowerCase()) return 1
return 0;
});
您需要将每个元素与下一个元素进行比较,然后返回等于或大于或等于