javascript:更改所有键的值顺序

javascript:更改所有键的值顺序,javascript,jquery,arrays,sorting,object,Javascript,Jquery,Arrays,Sorting,Object,我有一个具有以下结构的对象: object = { ids: [], labels:[], values:[] } 每个键有80个值。我想按降序(从大到小)对“values”键进行排序,并相应地更新id和labels键(因此最高“values”值的label和id现在是第一个)。我尝试了以下代码,但不起作用: function getSorted(arr, sortArr) { var result = []; for(var i=0; i<arr.length; i++) {

我有一个具有以下结构的对象:

object = { ids: [], labels:[], values:[] }
每个键有80个值。我想按降序(从大到小)对“values”键进行排序,并相应地更新id和labels键(因此最高“values”值的label和id现在是第一个)。我尝试了以下代码,但不起作用:

function getSorted(arr, sortArr) {
  var result = [];
  for(var i=0; i<arr.length; i++) {
    console.log(sortArr[i], arr[i]);
    result[i] = arr[sortArr[i]];
  }
  return result;
}

我应该如何解决这个问题?感谢

这三组数据之间的唯一关系是每个数组内部的索引,排序时索引将丢失。为了使这三组数据保持成对,我将映射您的数据,并为每个数据创建一个对象:

const data = { ids, labels, values };

const list = data.values.map((value, idx) => {
  return {
    id: data.ids[idx],
    value,
    label: data.labels[idx]
  };
});
现在,
列表
包含一个对象数组:

[
  {
    id: 41,
    label: 'Bacteria',
    value: '71',
  },
  {
    // ... etc
  }
]
这是一个更容易使用的数据结构,因为您希望
id
label
value
保持成对

此时,您可以通过值属性按降序方式轻松对该对象数组进行排序,如下所示:

现在,
list
是一个数据对象数组,按
object.value
降序排列


您可以使用此对象数组,也可以轻松地将其转换回三个不同数组的原始格式。

我知道它与您要求的略有不同,但也许您可以了解如何适应您的需要

不久前,我使用此函数来解决对象的排序问题

function sortObj(obj, index, sorting) {
  let ans = [];
  sorting = sorting.toUpperCase();

  if (obj.constructor === Array) {
    for (let i=0; i < obj.length; i++) {
      ans.push(obj[i]);
    }
  }
  else {
    for (let k in obj) {
      if (obj.hasOwnProperty(k)) {
        ans.push(obj[k])
      }
    }
  }

  if (!ans.length)
    return [];


  if (isNaN(ans[0][index])) {
    ans = ans.sort(function (a,b) {
      if (a[index]) {
        if (sorting === "ASC")
          return a[index].localeCompare(b[index]);
        else
          return b[index].localeCompare(a[index]);
      }
      return [];
    });
  }
  else {
    ans = ans.sort(function (a, b) {
      if (sorting === "ASC")
        return a[index] - b[index];

      else
        return b[index] - a[index];
    })
  }

  return ans;
}

// structure of object
obj = {"1": {id: "1", label: "A", value: "5"}, "2": {id: "2", label: "B", value: "1"}}


sorted = sortObj(obj, "label", "ASC");
// [{id: "1", label: "A", value: "5"}, {id: "2", label: "B", value: "1"}]


sorted = sortObj(obj, "value", "ASC");
// [{id: "2", label: "B", value: "1"}, {id: "1", label: "A", value: "5"}]
函数sortObj(对象、索引、排序){
设ans=[];
排序=sorting.toUpperCase();
if(obj.constructor==数组){
for(设i=0;i
list.sort((a, b) => {
  return b.value - a.value;
});
function sortObj(obj, index, sorting) {
  let ans = [];
  sorting = sorting.toUpperCase();

  if (obj.constructor === Array) {
    for (let i=0; i < obj.length; i++) {
      ans.push(obj[i]);
    }
  }
  else {
    for (let k in obj) {
      if (obj.hasOwnProperty(k)) {
        ans.push(obj[k])
      }
    }
  }

  if (!ans.length)
    return [];


  if (isNaN(ans[0][index])) {
    ans = ans.sort(function (a,b) {
      if (a[index]) {
        if (sorting === "ASC")
          return a[index].localeCompare(b[index]);
        else
          return b[index].localeCompare(a[index]);
      }
      return [];
    });
  }
  else {
    ans = ans.sort(function (a, b) {
      if (sorting === "ASC")
        return a[index] - b[index];

      else
        return b[index] - a[index];
    })
  }

  return ans;
}

// structure of object
obj = {"1": {id: "1", label: "A", value: "5"}, "2": {id: "2", label: "B", value: "1"}}


sorted = sortObj(obj, "label", "ASC");
// [{id: "1", label: "A", value: "5"}, {id: "2", label: "B", value: "1"}]


sorted = sortObj(obj, "value", "ASC");
// [{id: "2", label: "B", value: "1"}, {id: "1", label: "A", value: "5"}]