无法使用JavaScript按最大值对数组进行排序
我试图使用JavaScript按照最大值对数组值进行排序,但结果不正确。这是我的密码:无法使用JavaScript按最大值对数组进行排序,javascript,arrays,Javascript,Arrays,我试图使用JavaScript按照最大值对数组值进行排序,但结果不正确。这是我的密码: function myFunction() { var inputdata = [ [1001, 20], [1002, 30], [1001, 50], [1003, 30], [1002, 60], [1003, 40], [1001, 70] ]; var
function myFunction() {
var inputdata = [
[1001, 20],
[1002, 30],
[1001, 50],
[1003, 30],
[1002, 60],
[1003, 40],
[1001, 70]
];
var storedata = [];
for (var i = 0; i < inputdata.length; i++) {
if (i === 0) {
var data = {
'key': inputdata[i][0],
'value': inputdata[i][1]
};
storedata.push(data);
} else {
for (var j = 0; j < storedata.length; j++) {
if (storedata[j]['key'] == inputdata[i][0]) {
if (storedata[j]['value'] < inputdata[i][1]) {
storedata[j]['value'] = inputdata[i][1];
}
break;
} else {
var data = {
'key': inputdata[i][0],
'value': inputdata[i][1]
};
storedata.push(data);
}
}
}
}
console.log(storedata);
}
函数myFunction(){
变量输入数据=[
[1001, 20],
[1002, 30],
[1001, 50],
[1003, 30],
[1002, 60],
[1003, 40],
[1001, 70]
];
var-storedata=[];
对于(变量i=0;i
在这里,我试图对值进行排序,比如最大值
100110021003
,但在我的例子中,预期的结果不会出现。因为在内部循环中,当您使用j
再次遍历数组时,其中一个条目可能已经是您正在查找的条目,但您正在迭代的所有其他条目都不是,对于那些你正在复制的条目。换句话说:将else{
部分移出循环,首先检查整个数组中是否存在条目,并且仅在不添加新条目的情况下:
var exists = false;
for(var j = 0; j < storeddata.length; j++) {
if(/*...*/) {
// merge
exists = true;
break;
} // don't insert here
}
if(!exists) {
// insert
}
不太清楚的是,您是希望按第一个值排序,然后按第二个值排序,还是希望仅列出此处排序的子数组第一个值的唯一值,或者是否需要子数组第一个值中的所有值 因此,我将提供所有这些(按子数组中的两个值排序),然后提供第二个、所有已排序的值,然后提供第三个、已排序子数组中第一个元素的唯一值
var inputdata=[
[1001, 20],
[1002, 30],
[1001, 50],
[1003, 30],
[1002, 60],
[1003, 40],
[1001, 70]
];
/*按第一个和第二个值排序*/
var sortedArray=inputdata.sort(函数(a,b){
如果(a[0]==b[0]){
返回b[1]-a[1];
}
返回b[0]-a[0];
}).reverse();
控制台日志(Darray);
/*只需对唯一的第一个值进行排序*/
设iA=[];
inputdata.forEach(函数(元素){
iA.push(元素[0]);
});
/*所有第一个值,已排序*/
console.log(iA.sort());
/*排序的唯一第一个值*/
让uniqueSorted=[…新集合(iA)].sort();
console.log(uniqueSorted);
只需使用内置排序?inputdata.sort()
您可以将您的预期结果和您得到的结果添加到问题中吗?他不想排序,他想合并。仍然不清楚您的预期输出是什么。有人说sort,有人说merge。@Jonaswillms合并在哪里?
const result = [];
for(const [key, value] of inputdata) {
const duplicate = result.find(entry => entry.key === key);
if(duplicate) {
duplicate.value = Math.max(duplicate.value, value);
} else {
result.push({ key, value });
}
}