javascript - 基于另一个数组中的值对数组进行排序 - Javascript

  显示原文与译文双语对照的内容

我有以下对象数组:


arr1 = [{chart: {field:"test", title:"ABC", type: 0}}, {chart: {field:"test", title:"123", type: 1}}, {chart: {field:"test", title:"XYZ", type: 2}}]



arr2 = [{Name:"XYZ"}, {Name:"ABC"}, {Name:"123"}]



如何根据arr1标题的值对arr2进行排序?

所需输出的为:


[{Name:"ABC"}, {Name:"123"}, {Name:"XYZ"}]



时间:

你可以使用内置排序方法并使用 findIndex 。 而 sort() 根据这个指数。 我使用通用函数 func 来获取排序参数的索引。


const arr1 = [{chart: {field:"test", title:"ABC", type: 0}}, {chart: {field:"test", title:"123", type: 1}}, {chart: {field:"test", title:"XYZ", type: 2}}]



const arr2 = [{Name:"XYZ"}, {Name:"ABC"}, {Name:"123"}];



const func = a => arr1.findIndex(b => b.chart.title === a.Name);



const res = [...arr2].sort((a,b) => func(a) - func(b));



console.log(res)

不要对arr2排序,而是基于arr1中的值对它的赋值:


[{chart: {field:"test", title:"ABC", type: 0}}, {chart: {field:"test", title:"123", type: 1}}, {chart: {field:"test", title:"XYZ", type: 2}}].map(item => ({"Name" : item.chart.title }) );



你可以用一个 Map 索引。


var array1 = [{ chart: { field:"test", title:"ABC", type: 0 } }, { chart: { field:"test", title:"123", type: 1 } }, { chart: { field:"test", title:"XYZ", type: 2 } }],


 array2 = [{ Name:"XYZ" }, { Name:"ABC" }, { Name:"123" }],


 indices = new Map(array1.map(({ chart: { title }}, i) => [title, i]));



array2.sort(({ Name: a }, { Name: b }) => indices.get(a) - indices.get(b));



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

只需从arr1创建一个新的arr2 array 。


arr2 = arr1.map((result) => ({Name: result.chart.title}));



谢谢。

...