Javascript 仅对数组中的对进行排序
我有一个对象数组,例如:Javascript 仅对数组中的对进行排序,javascript,html,typescript,web,Javascript,Html,Typescript,Web,我有一个对象数组,例如: const arr = [ { type: 2, name: 'A', }, { type: 1, name: 'B'}, { type: 2, name: 'C'}, { type: 1, name: 'D', }, ]; 现在你看不到的是,有成对的物体。所以“A”和“B”应该在一起。现在我想对这个数组进行排序,所以最后它变成: const result = [ {
const arr = [
{
type: 2,
name: 'A',
},
{
type: 1,
name: 'B'},
{
type: 2,
name: 'C'},
{
type: 1,
name: 'D',
},
];
现在你看不到的是,有成对的物体。所以“A”和“B”应该在一起。现在我想对这个数组进行排序,所以最后它变成:
const result = [
{
type: 1,
name: 'B',
},
{
type: 2,
name: 'A'},
{
type: 1,
name: 'D'},
{
type: 2,
name: 'C',
},
];
所以基本上我只想对这对进行排序
我试着像这样使用索引
基本上只使用模运算符作为当前值的索引,但我担心排序机制的工作方式有点不同。我假设
arePair(a,b)
是一个函数,它包含关于对象对的信息,如果参数是pair,则返回true(我们不知道您所写的有问题的信息,但在snipped中我给出了一些示例)。我还假设您希望按类型对成对进行排序
arr.sort((a,b) => arePair(a,b) ? a.type-b.type : 0 );
const arr=[
{
类型:2,
名称:‘A’,
},
{
类型:1,
名称:'B'},
{
类型:2,
名称:'C'},
{
类型:1,
名称:“D”,
},
];
常量arePair=(a,b)=>[{'a':1,'b':1},{'C':1,'D':1}];
arr.sort((a,b)=>arePair(a,b)?a.type-b.type:0);
console.log(arr);
我对你的问题的解释是,你的数组是一个扁平的元素对列表,你希望每对元素按类型进行排序。为此,我将引入chunk()
操作和扁平化()
操作
chunk(arr,chunksise)
函数获取一个数组arr
并将其拆分为长度chunkSize
,因此chunk([1,2,3,4,5,6],3)
是[[1,2,3],[4,5,6]]
。它可以用多种方式编写;这里有一种:
const chunk = <T>(arr: T[], chunksize: number) =>
arr.reduce<T[][]>(
(acc, cur) => (
acc[acc.length - 1].length < chunksize || acc.push([]),
acc[acc.length - 1].push(cur),
acc
),
[[]]
);
const flatten = <T>(arr: T[][]) =>
arr.reduce<T[]>((acc, cur) => (acc.push(...cur), acc), []);
最后,对于要执行的操作,我们将采用arr
,将其分为几对,按元素的类型
属性对每对进行排序,并将结果展平:
const result = flatten(chunk(arr, 2).map(e => e.sort((a, b) => a.type - b.type)));
让我们确保这是你想要的:
console.log(JSON.stringify(result));
// [{"type":1,"name":"B"},{"type":2,"name":"A"},
// {"type":1,"name":"D"},{"type":2,"name":"C"}]
看起来不错。希望对你有帮助;祝你好运
通过配对,您可以拼接连接的项目,排序并将其拼接回阵列
var数组=[{type:2,名称:'A'},{type:1,名称:'B'},{type:2,名称:'C'},{type:1,名称:'D'}],
尺寸=2,
i=0;
while(ia.type-b.type));
i+=尺寸;
}
console.log(数组);
。作为控制台包装器{max height:100%!important;top:0;}
您能详细解释一下您想要什么吗?这样“A”和“B”就属于一个整体了-为什么/如何?请帮助我们理解有关成对的部分。它们成对是因为它们在列表中彼此相邻?还是因为它们在某些其他数据结构中成对?听起来好像您想按类型排序,然后按名称排序,但您没有一个断开列来告诉排序何时开始再次计数。您找到的映射是如果知道原始顺序没有帮助,则可能没有帮助。也许可以看看多维数组。@undrline“听起来你想按类型排序,然后按名称排序”-否。结果的顺序是1/B、2/A、1/D、2/C
而不是1B、1D、2A、2C