gpt4 book ai didi

javascript - 按字符串数组对对象数组进行排序

转载 作者:行者123 更新时间:2023-11-28 14:21:15 25 4
gpt4 key购买 nike

所以我有一个类似于下面的对象数组:

var objs = [
{ key: 'address', value: '1234 street' },
{ key: 'nameAndTitle', value: 'John Smith, CEO' },
{ key: 'contactEmail', value: 'johnsmith@gmail.com' },
{ key: 'contactPhone', value: '1234567890' },
{ key: 'localPhone', value: '1234567890' },
{ key: 'status', value: 'open' },
]

我希望它的顺序与我拥有的另一个字符串数组的顺序相同,看起来像这样。

var keys = [
'nameAndTitle',
'contactPhone',
'contactEmail',
'address',
]

我想对 objs 数组进行排序以匹配 keys 数组的顺序。如果 keys 数组中不存在该对象,则应将其放置在底部。谁能帮我解决这个问题吗?

最佳答案

您可以获取索引并按其增量排序。

var objs = [{ key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' }],
keys = ['nameAndTitle', 'contactPhone', 'contactEmail', 'address'];

objs.sort((a, b) => keys.indexOf(a.key) - keys.indexOf(b.key));

console.log(objs);
.as-console-wrapper { max-height: 100% !important; top: 0; }

为了完全控制顺序,您可以采用具有所需顺序值的对象,并使用值小于所有其他值的默认属性将未知键排序到顶部或使用大于所有其他值的值到数组的底部。

这种方法也适用于奇特的排序方案,如果需要的话,未知的项目会排序到中间。

var objs = [{ key: 'localPhone', value: '1234567890' }, { key: 'status', value: 'open' }, { key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' }],
order = { nameAndTitle: 1, contactPhone: 2, contactEmail: 3, address: 4, default: Infinity };

objs.sort(({ key: a }, { key: b }) => (order[a] || order.default) - (order[b] || order.default));

console.log(objs);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES5

var objs = [{ key: 'localPhone', value: '1234567890' }, { key: 'status', value: 'open' }, { key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' }],
order = { nameAndTitle: 1, contactPhone: 2, contactEmail: 3, address: 4, default: Infinity };

objs.sort(function (a, b) {
return (order[a.key] || order.default) - (order[b.key] || order.default);
});

console.log(objs);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 按字符串数组对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55162873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com