![](/img/trans.png)
[英]Sort JavaScript array of Objects based on the object's properties in custom way
[英]Fastest way to sort object's array based on other's object's array property
我有两个对象数组,它们都具有columnId属性。 我想使第一个对象的数组的顺序与第二个对象的顺序相同。
我已经试过了:
filtered = visibleColumns.filter(function(v) {
return filtered.includes(v.colId);
});
我的结果数组filtered
在哪里,而visibleColumns
是我需要的顺序排列的数组,但这不起作用。
数组的例子:
filtered = [{ colId:1, title: 'col1', size: 10 }, { colId:2, title: 'col2', size: 10 }]; visibleColumns = [{ colId:2, visible: true }, { colId:1, visible: true }];
您可以创建一个Map
对象,将每个colId
从visibleColumns
映射到数组中的索引。 获取每个目录colId
排序时filtered
const filtered = [{ colId: 1, title: "col1", size: 10 }, { colId: 2, title: "col2", size: 10 }], visibleColumns = [{ colId: 2, visible: true }, { colId: 1, visible: true }]; const order = new Map(visibleColumns.map((o, i) => [o.colId, i])) filtered.sort((a, b) => order.get(a.colId) - order.get(b.colId)) console.log(filtered)
您可以创建具有所需顺序的对象,并为未知ID取默认值以将其排序到最底端。
var filtered = [{ colId: 1, title: 'col1', size: 10 }, { colId: 2, title: 'col2', size: 10 }], visibleColumns = [{ colId: 2, visible: true }, { colId: 1, visible: true }], order = visibleColumns.reduce((o, { colId }, i) => (o[colId] = i + 1, o), {}); filtered.sort((a, b) => (order[a.colId] || Infinity) - (order[b.colId] || Infinity)); console.log(filtered);
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.