Javascript 如何返回具有';猫';第一和';水';介于';猫';和';狗;?

Javascript 如何返回具有';猫';第一和';水';介于';猫';和';狗;?,javascript,arrays,Javascript,Arrays,到目前为止,我所拥有的: var separate = [cats, water, dogs]; separate.sort(function(cats, water, dogs) {return cats-water-dogs}); 问题: 狗和猫相处不好,猫和狗也相处不好 他们两人的共同点是他们不喜欢水(洗澡) 给定一个“dogs”、“cats”和“water”数组,编写一个名为separate的函数,该函数返回一个新数组,以便通过water将狗和猫分开。确保猫总是排在第一位 您可以假设阵

到目前为止,我所拥有的:

var separate = [cats, water, dogs];
separate.sort(function(cats, water, dogs) {return cats-water-dogs});
问题:

狗和猫相处不好,猫和狗也相处不好

他们两人的共同点是他们不喜欢水(洗澡)

给定一个“dogs”、“cats”和“water”数组,编写一个名为
separate
的函数,该函数返回一个新数组,以便通过water将狗和猫分开。确保猫总是排在第一位

您可以假设阵列将始终至少包含三个元素,并且始终至少有一只狗、一只猫和一杯水可供使用

Examples:

separate(['dog','cat','water']) // ['cat','water','dog']

separate(['dog','cat','water','cat']) // ['cat', 'cat', 'water', 'dog'])

separate(['cat','cat','water','dog','water','cat','water','dog']) 
  // ['cat','cat','cat','water','water','water','dog','dog']

separate(
   ['cat','cat','cat','cat','cat',
    'cat','cat','cat','cat','cat','cat',
    'cat','cat','cat','cat','cat','cat','cat',
    'dog','water','water','water','water','water',
    'water','water','water','water','water','water',
    'water','water','water'
]) 

 // ['cat','cat','cat','cat','cat',
    'cat','cat','cat','cat','cat','cat',
    'cat','cat','cat','cat','cat','cat','cat',
    'water','water','water','water','water',
    'water','water','water','water','water','water',
    'water','water','water', 'dog']

您应该使用功能
排序
,并将狗值移动到最后一个位置,如下所示:

  • a=='dog'
    返回
    1
    时,因为dog应该在末尾
  • b===“dog”
    返回
    -1
    ,因为
    a
    的值应该在
    b
    之前
让arr=['cat','cat','cat','cat','cat','cat','cat',',
‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’,
‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’,
“狗”,“水”,“水”,“水”,“水”,“水”,“水”,
“水”,“水”,“水”,“水”,“水”,“水”,“水”,
"水","水","水",;
让结果=arr.sort((a,b)=>{
如果(a==‘狗’)返回1;
如果(b=='dog')返回-1;
否则返回a.localeCompare(b);//cat始终在开头。
});
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
这里,我们使用一种自定义排序算法进行排序,该算法可以理解狗、猫和水的区别

//使用此选项分配一个值0,1,2以拆分它们
常量重量=(a)=>(a==‘狗’)?0:(a==‘水’)?1 : 2;
//我们这一类将使用重量
常数sortItem=(a,b)=>重量(a)-重量(b);
const separate=(arr)=>arr.sort(sortItem);
console.log(单独的(['dog','cat','water']);//[‘猫’、‘水’、‘狗’]
console.log(单独的(['dog','cat','water','cat']);//[‘猫’、‘猫’、‘水’、‘狗’])
日志(单独的(['cat','cat','water','dog','water','cat','water','dog'])向上

让arr=['cat','cat','cat','cat','cat','cat','cat',',
‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’,
‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’、‘猫’,
“狗”,“水”,“水”,“水”,“水”,“水”,“水”,
“水”,“水”,“水”,“水”,“水”,“水”,“水”,
"水","水","水",;
让结果=arr.sort((a,b)=>{
如果(a==‘狗’)返回1;
如果(b=='dog')返回-1;
否则返回a.localeCompare(b);//cat始终在开头。
});

控制台日志(结果)
sort
.sort
回调只接受两个参数,而不是3Hi-Kevin,我建议您阅读Array.sort,如果您需要帮助,请尝试编写答案: