JavaScript数组CSV按位置解析和排序并重新排序

时间:2016-07-28 00:30:34

标签: javascript arrays sorting csv multidimensional-array

我有一个长度为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";

我完全摧毁了我的工作空间,试图让这个工作。

任何建议都将不胜感激!

2 个答案:

答案 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);