我有一个长度为X的数组,本例中它是8.每个位置都是一个带有3个值的CSV。我试图通过csv中的第3个值对其进行排序。
我的数组
array[0] = "1,17,28";
array[1] = "2,1,5";
array[2] = "3,37,48";
array[3] = "4,9,15";
array[4] = "5,4,14";
array[5] = "6,6,17";
array[6] = "7,99,110";
array[7] = "8,5,16";
新数组在排序后应如何看待:
newArray[0] = "2,1,5";
newArray[1] = "5,4,14";
newArray[2] = "4,9,15";
newArray[3] = "8,5,16";
newArray[4] = "6,6,17";
newArray[5] = "1,17,28";
newArray[6] = "3,37,48";
newArray[7] = "7,99,110";
我完全摧毁了我的工作空间,试图让这个工作。
任何建议都将不胜感激!
答案 0 :(得分:2)
你可以为此Array.sort()做
AttributeError
修改强>
如果你想让你的旧阵列保持不变,那么这只是额外的。 (ES6语法)
var arr = [
'1,17,28',
'2,1,5',
'3,37,48',
'4,9,15',
'5,4,14',
'6,6,17',
'7,99,110',
'8,5,16'
];
arr.sort(function(a, b) {
var x = a.split(',')[2];
var y = b.split(',')[2];
return x - y;
});
// Returns ["2,1,5", "5,4,14", "4,9,15", "8,5,16", "6,6,17", "1,17,28", "3,37,48", "7,99,110"]
答案 1 :(得分:0)
我首先预先计算一个由每个输入元素的第三个数组成的数组;让我们称之为“三分之一”。然后,您可以生成一个表示与输入数组长度相同的索引序列的数组,并根据三分数数组对其进行排序。最后,您可以将生成的排序索引序列映射回输入数组以对其进行排序。
array = [
'1,17,28',
'2,1,5',
'3,37,48',
'4,9,15',
'5,4,14',
'6,6,17',
'7,99,110',
'8,5,16'
];
var e3 = array.map(e => Number(e.split(',')[2]));
var newArray = Array.from(array.keys()).sort((a,b) => e3[a]-e3[b]).map(i => array[i]);
console.log(newArray);