Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据Javascript中的一个数组对对象中的两个数组进行排序_Javascript - Fatal编程技术网

根据Javascript中的一个数组对对象中的两个数组进行排序

根据Javascript中的一个数组对对象中的两个数组进行排序,javascript,Javascript,我有这样一个数组: var arr = [ {a: 1, b: ['apple', 'banana', 'orange', 'mango'], c: [42, 7, 18, 5]}, {a: 2, b: ['apple', 'banana', 'orange', 'mango'], c: [4, 101, 88, 3]}, {a: 3, b: ['apple', 'banana', 'orange', 'mango'], c: [14, 10, 5, 12]}, {a:

我有这样一个数组:

var arr = [
   {a: 1, b: ['apple', 'banana', 'orange', 'mango'], c: [42, 7, 18, 5]},
   {a: 2, b: ['apple', 'banana', 'orange', 'mango'], c: [4, 101, 88, 3]},
   {a: 3, b: ['apple', 'banana', 'orange', 'mango'], c: [14, 10, 5, 12]},
   {a: 4, b: ['apple', 'banana', 'orange', 'mango'], c: [99, 2, 105, 101]}
];
arr = [
   {a: 1, b: ['mango', 'banana', 'orange', 'apple'], c: [5, 7, 18, 42]},
   {a: 2, b: ['mango', 'apple', 'orange', 'banana'], c: [3, 4, 88, 101]},
   {a: 3, b: ['orange', 'banana', 'mango', 'apple'], c: [5, 10, 12, 14]},
   {a: 4, b: ['banana', 'apple', 'mango', 'orange'], c: [2, 99, 101, 105]}
];
我需要根据
arr[x].c
值对
arr[x].b
arr[x].c
进行排序。因此,最终的数组应该如下所示:

var arr = [
   {a: 1, b: ['apple', 'banana', 'orange', 'mango'], c: [42, 7, 18, 5]},
   {a: 2, b: ['apple', 'banana', 'orange', 'mango'], c: [4, 101, 88, 3]},
   {a: 3, b: ['apple', 'banana', 'orange', 'mango'], c: [14, 10, 5, 12]},
   {a: 4, b: ['apple', 'banana', 'orange', 'mango'], c: [99, 2, 105, 101]}
];
arr = [
   {a: 1, b: ['mango', 'banana', 'orange', 'apple'], c: [5, 7, 18, 42]},
   {a: 2, b: ['mango', 'apple', 'orange', 'banana'], c: [3, 4, 88, 101]},
   {a: 3, b: ['orange', 'banana', 'mango', 'apple'], c: [5, 10, 12, 14]},
   {a: 4, b: ['banana', 'apple', 'mango', 'orange'], c: [2, 99, 101, 105]}
];

对于每个对象,构造一个
Map
,其键是水果串,值是
c
数组中的关联原始编号。对
c
数组进行排序,然后根据地图中项目之间的差异对
b
数组进行排序:

const arr=[
{a:1,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[42,7,18,5]},
{a:2,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[4,101,88,3]},
{a:3,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[14、10、5、12]},
{a:4,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[99,2105101]}
];
Object.values(arr.forEach)({b,c})=>{
常量值=c.reduce(
(map,num,i)=>map.set(b[i],num),
新地图()
);
c、 排序((a,b)=>a-b);
b、 排序((a,b)=>fruitValues.get(a)-fruitValues.get(b));
});

控制台日志(arr)
您可以将
b
c
的元素压缩在一起,按
c
元素对它们进行排序,然后将它们重新打包。使用此方法,即使要对多个列表进行排序,也只需要一个
排序

const arr=[
{a:1,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[42,7,18,5]},
{a:2,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[4,101,88,3]},
{a:3,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[14、10、5、12]},
{a:4,b:[‘苹果’、‘香蕉’、‘橘子’、‘芒果’],c:[99,2105101]}
];
Object.values(arr.forEach)(行=>{
让排序=row.b.map((e,i,a)=>[e,row.c[i]];
排序。排序([b1,c1],[b2,c2])=>c1-c2);
row.b=排序.map(([e,])=>e);
row.c=sorting.map(([,e])=>e);
});

控制台日志(arr)您可以获取主数组的索引进行排序,根据主数组的值进行排序,并以新的顺序映射所有需要的数组

var数组=[{a:1,b:['apple','banana','orange','mango'],c:[42,7,18,5]},{a:2,b:['apple','banana','orange','mango'],c:[4,101,88,3]},{a:3,b:['apple','bananage','rango'],c:[14,10,5,12]},{a:4,b:[apple','bananager','orange orange rango','mango'],c:[99,2105,101]};
array.forEach(o=>{
var指数=[…o.c.键()]排序((a,b)=>o.c[a]-o.c[b]);
forEach(k=>o[k]=index.map(i=>o[k][i]);
});
console.log(数组)

.as console wrapper{max height:100%!important;top:0;}
注意chrome对js数组的排序不会超过20行。@McBern,你有这个语句的来源吗?@NinaScholz你可以在这里阅读:sorter.js在这里
我的意思是chrome不会对js数组进行正确排序>10行。
@McBern,谢谢你的链接。事实上,chrome是稳定的。你试过用谷歌chrome排序吗?js数组中的行数超过10行?我以前试过mozilla和IE,但google chrome排序不正确。我没有尝试过狩猎。