Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Javascript Objects - Fatal编程技术网

Javascript 对列中的多维对象数组进行排序

Javascript 对列中的多维对象数组进行排序,javascript,sorting,javascript-objects,Javascript,Sorting,Javascript Objects,我只是想不通 var arr = [ [ {'value': 3, 'id': 'ab'}, {'value': 1, 'id': 'ab'}, {'value': 5, 'id': 'ab'} ], [ {'value': 6, 'id': 'bc'}, {'value': 3, 'id': 'bc'}, {'value': 4, 'id': 'bc'} ], [ {'value': 1, 'id': 'cd'}, {'value': 3, 'id': 'cd'}, {'value

我只是想不通

var arr = [
[ {'value': 3, 'id': 'ab'},  {'value': 1, 'id': 'ab'},  {'value': 5, 'id': 'ab'} ],
[ {'value': 6, 'id': 'bc'},  {'value': 3, 'id': 'bc'},  {'value': 4, 'id': 'bc'} ],
[ {'value': 1, 'id': 'cd'},  {'value': 3, 'id': 'cd'},  {'value': 2, 'id': 'de'} ],
]
我有一个数组arr。 arr[0]、arr[1]和arr[2]都包含相同数量的对象

我想按arr[1]对整个数组进行排序。比如说

var result = [
[ {'value': 1, 'id': 'ab'},  {'value': 5, 'id': 'ab'}, {'value': 3, 'id': 'ab'}, ],
[ {'value': 3, 'id': 'bc'},  {'value': 4, 'id': 'bc'}, {'value': 6, 'id': 'bc'}, ],
[ {'value': 3, 'id': 'cd'},  {'value': 2, 'id': 'de'}, {'value': 1, 'id': 'cd'}, ],
]
->arr[1]现在按“值”(3,4,6)排序。arr[0]和arr[2]中的相应值也已“排序”。如果由于arr[1]排序正确,arr[1][1]移到开头,则arr[0][1]和arr[2][1]也会移到开头

排序前

3 1 5
6 3 4
1 3 2
排序后

1 5 3 <- 1 is 'linked' to 3 in 2nd row, 5 is 'linked' to 4 in 2nd row, etc.
3 4 6 <- sorted
3 2 1 <- 3 is 'linked' to 3 in 2nd row, 2 is 'linked' to 4 in 2nd row, etc.
但这当然不会像我希望的那样改变arr[0]和arr[2]。很明显,这同样适用于中国

arr.forEach(item =>
item.sort(function(a,b) {
    return a.value-b.value
}));
它只对每个数组进行单独排序

是否可能,例如,获取a和b的索引,以便我可以自己移动arr[0]和arr[1]中的项目


非常感谢您的帮助

可能不是最优雅的解决方案,但我将数组转置,然后对其排序,然后将其转置回原始形式

// sort array accordingly to this row
let i = 1;

var arr = [
[ {'value': 1, 'id': 'ab'},  {'value': 6, 'id': 'ab'},  {'value': 3, 'id': 'ab'} ],
[ {'value': 3, 'id': 'bc'},  {'value': 1, 'id': 'bc'},  {'value': 4, 'id': 'bc'} ],
[ {'value': 2, 'id': 'cd'},  {'value': 1, 'id': 'cd'},  {'value': 8, 'id': 'cd'} ],
]

function transpose(m) {
    return Object.keys(m[0]).map(function(a) {
        return m.map(function(b) { return b[a]; });
    });
}

arr = transpose(arr);

arr.sort(function sortFunction(a, b) {
    if (a[i].value === b[i].value) {
        return 0;
    }
    else {
        return (a[i].value < b[i].value) ? -1 : 1;
    }
})

arr = transpose(arr);

console.log(arr);

//根据此行对数组进行排序
设i=1;
var arr=[
[{'value':1,'id':'ab'},{'value':6,'id':'ab'},{'value':3,'id':'ab'}],
[{'value':3,'id':'bc'},{'value':1,'id':'bc'},{'value':4,'id':'bc'}],
[{'value':2,'id':'cd'},{'value':1,'id':'cd'},{'value':8,'id':'cd'}],
]
函数转置(m){
返回Object.keys(m[0]).map(函数(a){
返回m.map(函数(b){返回b[a];});
});
}
arr=转置(arr);
arr.sort(函数sort函数(a,b){
如果(a[i].value==b[i].value){
返回0;
}
否则{
返回值(a[i]。值
这里有一个方法,首先计算对象的排序顺序。
然后使用该排序顺序以相同的方式对每一行进行排序

var-arr=[
[{'value':3,'id':'ab'},{'value':1,'id':'ab'},{'value':5,'id':'ab'}],
[{'value':6,'id':'bc'},{'value':3,'id':'bc'},{'value':4,'id':'bc'}],
[{'value':1,'id':'cd'},{'value':3,'id':'cd'},{'value':2,'id':'de'}]
];
函数sortArrayColumnsByIndex(arr2dOfObj、rowindex、objkey){
设rownum=rowindex | | 0;
让key=objkey | | Object.keys(arr2dOfObj[0][0])[0];
设sortorder=arr2dOfObj[rownum]
.map((x,i)=>[x,i])
.sort((a,b)=>a[0][key]b[0][key]?1:0)
.map(x=>x[1]);
arr2dOfObj.forEach(
(世界其他地区,idx)=>{
设排序=[];
排序器forEach((y)=>{
已排序。推送(行[y]);
})
arr2dOfObj[idx]=已排序;
}
);
}
Sortarray ColumnsByIndex(arr,1,'值');

console.log(JSON.stringify(arr))
什么是“按例如第二行排序”的意思?你怎么按行排序?我看不到任何排序在上面的所有。我看到将第二列移动到第一列,但是…欢迎使用堆栈溢出!请拿着(你得到了一枚徽章!)通读一下,尤其是你最好的选择是做你的研究,做相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会很乐意帮忙的。行是指列,即“id”?
// sort array accordingly to this row
let i = 1;

var arr = [
[ {'value': 1, 'id': 'ab'},  {'value': 6, 'id': 'ab'},  {'value': 3, 'id': 'ab'} ],
[ {'value': 3, 'id': 'bc'},  {'value': 1, 'id': 'bc'},  {'value': 4, 'id': 'bc'} ],
[ {'value': 2, 'id': 'cd'},  {'value': 1, 'id': 'cd'},  {'value': 8, 'id': 'cd'} ],
]

function transpose(m) {
    return Object.keys(m[0]).map(function(a) {
        return m.map(function(b) { return b[a]; });
    });
}

arr = transpose(arr);

arr.sort(function sortFunction(a, b) {
    if (a[i].value === b[i].value) {
        return 0;
    }
    else {
        return (a[i].value < b[i].value) ? -1 : 1;
    }
})

arr = transpose(arr);

console.log(arr);