Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays - Fatal编程技术网

无法使用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

我试图使用JavaScript按照最大值对数组值进行排序,但结果不正确。这是我的密码:

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 });
   }
}