Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对对象数组进行排序,但忽略';';以名义_Javascript_Arrays_Node.js_Sorting - Fatal编程技术网

Javascript 对对象数组进行排序,但忽略';';以名义

Javascript 对对象数组进行排序,但忽略';';以名义,javascript,arrays,node.js,sorting,Javascript,Arrays,Node.js,Sorting,我有以下一系列的项目 { name: 'Hundred Monkeys', address: '52 High Street Glastonbury BA6 9DY' }, { name: 'J.C Thomas and sons ltd', address: 'Thomas Way Glastonbury BA69LU' }, { name: 'Lady Of The Silver Wheel', address: '13 Market Place Glastonbury BA6 9HH

我有以下一系列的项目

{ name: 'Hundred Monkeys',
 address: '52 High Street Glastonbury BA6 9DY' },
{ name: 'J.C Thomas and sons ltd',
 address: 'Thomas Way Glastonbury BA69LU' },
{ name: 'Lady Of The Silver Wheel',
 address: '13 Market Place Glastonbury BA6 9HH' },
{ name: 'The Chalice Well',
 address: '85-89 Chilkwell Street Glastonbury BA6 8DD' },
{ name: 'The Glastonbury Wire Studio',
 address: '48a High Street Glastonbury BA6 9DX' },
{ name: 'The Isle of Avalon Foundation',
 address: 'The Glastonbury Experience, 2-4 High Street, Glastonbury BA6 9DU' },
{ name: 'The King Arthur',
address: '31-33 Benedict Street Glastonbury BA6 9NB' },
我把它分类

VenueList.sort((a, b) => a.name.localeCompare(b.name));

但是所有以“the”开头的名字都被排序在T下面。我能给这个排序添加一个条件来忽略第一个单词吗?如果它是“the”,我该怎么做呢?谢谢。

只需创建新字符串,其中不包含要忽略的数据

然后比较这些

VenueList.sort(function (a, b) {
    a = a.name.replace(/^The /, "");
    b = b.name.replace(/^The /, "");
    return a.localeCompare(b);
});

(根据需要调整正则表达式(例如,使其不区分大小写或添加其他单词))

只需创建新字符串,其中不包含您希望忽略的数据

然后比较这些

VenueList.sort(function (a, b) {
    a = a.name.replace(/^The /, "");
    b = b.name.replace(/^The /, "");
    return a.localeCompare(b);
});
(根据需要调整正则表达式(例如,使其不区分大小写或添加其他单词))

用于创建一个元组,其中包含您希望为每个对象排序的字符串。然后使用键进行排序。然后从元组中提取对象

注意:似乎有很多不必要的映射,但它省去了每次比较时提取正确键的需要

const VenueList=[{“姓名”:“百只猴子”,“地址”:“格拉斯顿伯里大街52号”},{“姓名”:“J.C托马斯父子有限公司”,“地址”:“托马斯路格拉斯顿伯里大街69号”},{“姓名”:“银轮夫人”,“地址”:“格拉斯顿伯里大街13号市场广场6 9HH”{“姓名”:“圣杯井”,“地址”:“85-89奇尔克韦尔大街格拉斯顿伯里大街6号”},{“姓名”:“格拉斯顿伯里电线工作室”,“地址”:“48a高街格拉斯顿伯里BA6 9DX”,{“名称”:“阿瓦隆岛基金会”,“地址”:“格拉斯顿伯里体验,格拉斯顿伯里BA6 9DU高街2-4号”},{“名称”:“亚瑟王”,“地址”:“31-33本尼迪克特街格拉斯顿伯里BA6 9NB”);
const result=VenueList
.map((o)=>[o.name.replace(/^The\s+/,''),o])//创建一个元组['King Arthur',{“name”:“The King Arthur”,“address”:……]
.sort(([a],[b])=>a.localeCompare(b))
.map(([,o])=>o);//提取原始对象{“名称”:“亚瑟王”,“地址”:…}
控制台日志(结果)用于创建一个元组,该元组包含您希望为每个对象排序的字符串。然后使用键进行排序。然后从元组中提取对象

注意:似乎有很多不必要的映射,但它省去了每次比较时提取正确键的需要

const VenueList=[{“姓名”:“百只猴子”,“地址”:“格拉斯顿伯里大街52号”},{“姓名”:“J.C托马斯父子有限公司”,“地址”:“托马斯路格拉斯顿伯里大街69号”},{“姓名”:“银轮夫人”,“地址”:“格拉斯顿伯里大街13号市场广场6 9HH”{“姓名”:“圣杯井”,“地址”:“85-89奇尔克韦尔大街格拉斯顿伯里大街6号”},{“姓名”:“格拉斯顿伯里电线工作室”,“地址”:“48a高街格拉斯顿伯里BA6 9DX”,{“名称”:“阿瓦隆岛基金会”,“地址”:“格拉斯顿伯里体验,格拉斯顿伯里BA6 9DU高街2-4号”},{“名称”:“亚瑟王”,“地址”:“31-33本尼迪克特街格拉斯顿伯里BA6 9NB”);
const result=VenueList
.map((o)=>[o.name.replace(/^The\s+/,''),o])//创建一个元组['King Arthur',{“name”:“The King Arthur”,“address”:……]
.sort(([a],[b])=>a.localeCompare(b))
.map(([,o])=>o);//提取原始对象{“名称”:“亚瑟王”,“地址”:…}

控制台日志(结果)
乍一看,这似乎是很多不必要的工作,但正如您在添加的注释中提到的,尤其是在较大的数组中,对于排序算法进行的每次比较,它可能比在两个字符串上调用replace执行得更好。此选项似乎比我的技能略高。。在
.map(([,o])=>o行中发生了什么这个,我以前没见过。。Thanks@PaulLeppard-我已经在地图上添加了注释。您可能想了解和。乍一看,这似乎是许多不必要的工作,但正如您在添加的说明中所述,尤其是在较大的数组中,对于排序算法进行的每次比较,它可能比在两个字符串上调用replace的性能更好。此选项似乎比我的技能略高。。在
.map(([,o])=>o行中发生了什么这个,我以前没见过。。Thanks@PaulLeppard-我已经在地图上添加了注释。你可能想读一读关于,和。工作很好谢谢