JavaScript中的自定义数组排序

JavaScript中的自定义数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个任务。需要按以下方式对字符串数组(城市)排序: 从数组中随机选择第一个城市 下一个城市必须以上一个城市的最后一个字母开头 如果没有这样的城市,再随机选取一个城市 问题是:我应该使用什么类型的循环,以及如何实现排序?我应该使用Array.sort()方法,以及如何将原来的城市数组动态转换为新数组。我应该使用Array.prototype的哪些方法 let cities = [ "New York", "Tokio", "Moscow", "London", "Los Angeles",

我有一个任务。需要按以下方式对字符串数组(城市)排序:

  • 从数组中随机选择第一个城市
  • 下一个城市必须以上一个城市的最后一个字母开头
  • 如果没有这样的城市,再随机选取一个城市
问题是:我应该使用什么类型的循环,以及如何实现排序?我应该使用Array.sort()方法,以及如何将原来的城市数组动态转换为新数组。我应该使用Array.prototype的哪些方法

let cities = [ "New York", "Tokio", "Moscow", "London", "Los Angeles", "Paris", "Berlin", "Madrid", "Kiev", "Oslo", "Barcelona", "Washington", "Ankara", "Rome", "Prague", "Amsterdam", "Minsk"];

function getRandomCity(arr) {
    return arr[Math.floor(Math.random()*arr.length)];
}

function sort(arr) {
    let unsortedArray = [...arr]; 
    let sortedArray = [];
}
let cities=[“纽约”、“东京”、“莫斯科”、“伦敦”、“洛杉矶”、“巴黎”、“柏林”、“马德里”、“基辅”、“奥斯陆”、“巴塞罗那”、“华盛顿”、“安卡拉”、“罗马”、“布拉格”、“阿姆斯特丹”、“明斯克”];
函数getRandomCity(arr){
返回Math.floor(Math.random()*arr.length);
}
函数排序(arr){
让unsortedArray=[…arr];
让Darray=[];
让char=“!”;
//choose将获取一个索引,然后将该索引处的城市推入SorterDarray,并将其从UnsortedDarray中删除,并将该城市的最后一个字母存储为字符(大写)
函数选择(索引){
设city=unsortedArray.splice(索引,1)[0];
达雷.普什(城市);
char=city.charAt(city.length-1.toUpperCase();
}
选择(getRandomCity(unsortedArray));//首先,选择一个随机城市
while(unsortedArray.length){//while还有城市
让index,test=unsortedArray.some(函数(c,i){//检查是否有一个以char开头的城市
index=i;//在进程中存储索引
返回c.charAt(0)==char;
});
if(test)//如果我们找到了一座城市
选择(索引);//选择它
否则//
选择(getRandomCity(unsortedArray));//选择一个随机的
}
返回至Darray;
}

控制台日志(排序(城市))
您可以使用
Array.prototype.slice()
Array.prototype.splice()
,递归从数组返回随机元素,或者使用具有首字母的元素,不区分大小写,与前面的元素相同

let cities=[“纽约”、“东京”、“莫斯科”、“伦敦”
“洛杉矶”、“巴黎”、“柏林”、“马德里”
“基辅”、“奥斯陆”、“巴塞罗那”、“华盛顿”
,“安卡拉”、“罗马”、“布拉格”、“阿姆斯特丹”、“明斯克”];
让copycity=cities.slice(0);
函数getRandomCity(复制、len、res=[]){
让柯尔,下一个;
如果(分辨率长度>0){
下一步=复制.filter(函数(城市){
var-prev=res[res.length-1]。切片(-1);
返回新的RegExp(城市[0],“i”).test(上一个)
});
如果(下一个长度)
next=copy.splice(copy.indexOf(next.shift()),1);
}
if(copy.length==len | |!next.length){
res.push(复制拼接(数学地板(数学随机()*复制长度),1)[0]);
}否则{
res.push(下一步[0]);
}
if(相对长度<长度){
返回城市(复制、len、res)
}否则{
返回res
}
}
var_cities=getRandomCity(copycity,cities.length);

console.log(_cities)数组.原型.排序
做这件事就像治疗癌症一样困难!你必须使用循环!很难说不为你解决这个问题,但我认为或可能对你有用。