在JavaScript中以特定顺序取元素



我有一个像下面这样的对象,我想把这个数组映射成一个特定的顺序,阿根廷、智利、美国

1: {label: 'Turkish Lira', flag: 'TR', id: 1, code: 'TRY', symbol: '₺', …}
2: {label: 'United States Dollar', flag: 'US', id: 2, code: 'USD', symbol: '$', …}
3: {label: 'Argentina Peso', flag: 'AR', id: 3, code: 'ARS', symbol: '$', …}
4: {label: 'Bahraini Dinar', flag: 'BH', id: 4, code: 'BHD', symbol: ' BD', …}
5: {label: 'Brazilian Real', flag: 'BR', id: 5, code: 'BRL', symbol: ' R$', …}
6: {label: 'Bulgarian Lev', flag: 'BG', id: 6, code: 'BGN', symbol: ' лв', …}
7: {label: 'Chilean Peso', flag: 'CL', id: 7, code: 'CLP', symbol: '$', …}

我该怎么做呢?

假设您有一个要排序的项目列表,称为items。您有一个索引列表,例如[0, 4, 2, 1, 3]

你可以indexes.map(i => items[i]);

var items = [{
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: '$'
}
]
var indexesList = [3, 5, 0, 2];
function sortByIndex(list, indexes) {
return indexes.map(i => items[i]);
}
console.log(sortByIndex(items, indexesList));

你可以使用javascript数组排序

const array = [{
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: '$'
}]
function sortBy(a, b) {
if (a.label < b.label) {
return -1;
}
if (a.label > b.label) {
return 1;
}
return 0;
}
console.log(array.sort(sortBy));

如果你想要一个通用的功能,你可以这样做。

const array = [{
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: '$'
}]
const sortBy = (attribute) => (a, b) => {
if (a[attribute] < b[attribute]) {
return -1;
}
if (a[attribute] > b[attribute]) {
return 1;
}
return 0;
}
console.log(array.sort(sortBy('label')));
console.log(array.sort(sortBy('code')));

最新更新