JavaScript中如何按指定顺序提取并排列数组元素
实现指定顺序排序对象数组的方法
你可以基于数组的sort方法配合自定义优先级映射实现需求,这里以匹配code字段为例,实现逻辑如下:
示例代码
// 原货币数组 const currencyList = [ {label: 'Turkish Lira', flag: 'TR', id: 1, code: 'TRY', symbol: '₺'}, {label: 'United States Dollar', flag: 'US', id: 2, code: 'USD', symbol: '$'}, {label: 'Argentina Peso', flag: 'AR', id: 3, code: 'ARS', symbol: '$'}, {label: 'Bahraini Dinar', flag: 'BH', id: 4, code: 'BHD', symbol: ' BD'}, {label: 'Brazilian Real', flag: 'BR', id: 5, code: 'BRL', symbol: ' R$'}, {label: 'Bulgarian Lev', flag: 'BG', id: 6, code: 'BGN', symbol: ' лв'}, {label: 'Chilean Peso', flag: 'CL', id: 7, code: 'CLP', symbol: '$'}, ] // 按「阿根廷、智利、美国」顺序定义优先级,对应货币的code值 const sortPriority = ['ARS', 'CLP', 'USD'] // 排序实现:如果不需要修改原数组,可先浅拷贝再排序:[...currencyList].sort(...) const sortedCurrencyList = currencyList.sort((a, b) => { const aPriority = sortPriority.indexOf(a.code) const bPriority = sortPriority.indexOf(b.code) // 两个元素都不在优先级列表内,按原有id从小到大排序 if (aPriority === -1 && bPriority === -1) return a.id - b.id // a不在优先级内,b在,a排在后面 if (aPriority === -1) return 1 // b不在优先级内,a在,b排在后面 if (bPriority === -1) return -1 // 都在优先级内,按优先级索引从小到大排序 return aPriority - bPriority })
逻辑说明
- 如果你需要基于
flag字段匹配排序,只需要把sortPriority改为['AR', 'CL', 'US'],同时将a.code、b.code替换为a.flag、b.flag即可 - 不在指定排序范围内的其他货币,默认保留原id的升序排列,你也可以根据需求调整该分支的排序规则,比如按
label的字母序排序
内容的提问来源于stack exchange,提问作者nodabasi
相关产品推荐
相关产品推荐

