更新:
第一段代码无效。因为它不会从控制台发出任何错误,所以我假设它可以工作。
但是感谢“ TJ”指出,很明显,该代码没有用于比较功能的条目(firstEl,secondEl)。 因此,获取排序的姓氏的正确方法是使用第二段代码。
eded
const sortPeople = people.sort((first, last) => {
const [aFirstName, aLastName] = first.split(",");
const [bFirstName, bLastName] = first.split(",");
aLastName> bLastName ? 1 : -1;
});
console.log(sortPeople);
第二个代码
const alpha = people.sort((lastOne, nextOne) => {
const [aLast, aFirst] = lastOne.split(', ');
const [bLast, bFirst] = nextOne.split(', ');
return aLast > bLast ? 1 : -1;
});
console.log(alpha);
由T.J.拥挤者
**如果sort的实现对回调在相等条目中得到错误的返回值的事实并不太困惑。第二个返回值应该是return aLast.localeCompare(bLast);或至少返回aLast == bLast? 0:aLast> bLast? 1:-1; **
答案 0 :(得分:1)
您需要返回两个姓氏的差,例如
people.sort((a, b) => a.split(', ')[0].localeCompare(b.split(', ')[0]));
答案 1 :(得分:0)
他们永远不会获得相同的结果!
对于第一个代码,您会注意到以下内容
const [firstName,lastName] = first.split(“,”); //如果是要排序的对象数组,将导致错误
first.lastName> last.lastName? 1:-1; //如果是您要排序的字符串数组,则会导致错误
,如果您要在返回之前键入代码,还应该使用return语句将其包装起来,在这种情况下,JavaScript不会添加隐式返回
return(first.lastName> last.lastName?1:-1);
People是包含姓氏的对象数组,这就是为什么它可以访问第一个lastName和第二个lastName的原因 从“第一个”和“最后一个”对象直接传递到箭头功能。
一组人应该是[{lastName:“ john”},{lastName:“ brad”},....]该对象还可以具有其他属性,例如firstName,age等等,以便使用这样。
在第二个代码中 人是一个字符串数组[“ last,first”,“ doe,john” ....]
const [aLast,aFirst] = lastOne.split(','); const [bLast,bFirst] = nextOne.split(',');
传递给箭头函数的lastOne和nextOne似乎是包含用逗号分隔的“ last,first”的字符串,并且在拆分之后,您将分解由于拆分“ lastOne”和“ nextOne”字符串而导致的数组,并且使用他们的lastName进行排序,使用2个新变量来保存要检查的值
答案 2 :(得分:-1)
const sortPeople = people.sort((first, last) => {
const [firstName, lastName] = first.split(",");
first.lastName > last.lastName ? 1 : -1;
});
console.log(sortPeople);
以上部分不执行任何操作,始终返回-1。因为first和last或not对象,所以您不能做first.lastName。 但是第二个代码。
const alpha = people.sort((lastOne, nextOne) => {
const [aLast, aFirst] = lastOne.split(', ');
const [bLast, bFirst] = nextOne.split(', ');
return aLast > bLast ? 1 : -1;
});
console.log(alpha);
会根据逗号前的值对字符串进行排序。但是由于数组已经排序,因此它总是返回-1。这就是块的两个代码具有相同结果的原因。