javascript - 如何根据多个条件对对象集合进行排序?

标签 javascript arrays sorting

我正在尝试使用 map 方法修复排序,因此我为 mappedDatasortedData 创建了单独的变量。问题是我没有对值进行排序。

第三个对象有'a'值,所以它应该按升序排序。

 const mappedData = data.map(number => {
    /* ... */
    number.sortColumn = "";
    if (number.animalNumbersRank) {
      number.sortColumn = number.animalNumbersRank[0].number;
    }
    console.log("number.sortColumn--->", number.sortColumn);
    console.log("number.heightValueStart--->", number.heightValueStart);

    return number;
  });
  const sortedData = mappedData.sort((a, b) => {
    /* ... */
    a.heightValueStart < b.heightValueStart
      ? -1
      : a.heightValueStart > b.heightValueStart
      ? 1
      : a.sortColumn < b.sortColumn
      ? -1
      : a.sortColumn > b.sortColumn
      ? 1
      : 0;
  });

  console.log("data--->", data);
  console.log("sortedData--->", sortedData);

var data = [{
    animalrId: 11111111111,
    // "lionId": erer,
    uiuiuiId: "151856658687700",
    ddfdfdf: "2018-02-14 19:03:31",
    category: "wewe5454",
    organizationName: "apple boy",
    jioID: "fdkldfkl",
    jioIDType: "EIN",
    heightValueStart: "c",
    formattedjioID: "8989-23892389",
    lowerOrgName: "apple boy",
    animalNumbersRank: [{
      number: "c"
    }],
    dklfkldf: [{
      number: "1548267230"
    }],
    jkkklkl: [{
      number: "21468096",
      expired: "Y"
    }],
    sortColumn: "c"
  },

  {
    animalrId: 222222222222,
    lionId: 232323,
    uiuiuiId: "153920398625500",
    ddfdfdf: "2018-10-10 19:02:45",
    category: "wewe 2323",
    organizationName: "b",
    jioID: "fdkldfkl",
    jioIDType: "EIN",
    heightValueStart: "b",
    formattedjioID: "8989-23892389",
    lowerOrgName: "apple boy",
    sortColumn: ""
  },

  {
    animalrId: 33333333333,
    lionId: 232323,
    uiuiuiId: "153920398625500",
    ddfdfdf: "2018-10-10 19:02:45",
    category: "wewe 545445",
    organizationName: "apple boy",
    jioID: "fdkldfkl",
    jioIDType: "EIN",
    heightValueStart: "a",
    formattedjioID: "8989-23892389",
    lowerOrgName: "apple boy",
    animalNumbersRank: [{
      number: "a"
    }],
    dklfkldf: [{
      number: "1548267230"
    }],
    jkkklkl: [{
        number: "475255"
      },
      {
        number: "299993436",
        expired: "Y"
      }
    ],
    sortColumn: "a"
  }
];

const mappedData = data.map(number => {
  /* ... */
  number.sortColumn = "";
  if (number.animalNumbersRank) {
    number.sortColumn = number.animalNumbersRank[0].number;
  }
  console.log("number.sortColumn--->", number.sortColumn);
  console.log("number.heightValueStart--->", number.heightValueStart);

  return number;
});
const sortedData = mappedData.sort((a, b) => {
  /* ... */
  a.heightValueStart < b.heightValueStart ?
    -1 :
    a.heightValueStart > b.heightValueStart ?
    1 :
    a.sortColumn < b.sortColumn ?
    -1 :
    a.sortColumn > b.sortColumn ?
    1 :
    0;
});

console.log("data--->", data);
console.log("sortedData--->", sortedData);

最佳答案

在你的sortedData中你不返回任何东西,你应该返回01-1.

const sortedData = data.sort((a, b) => {
  let number = 0;
  if ((a.heightValueStart < b.heightValueStart) || (a.sortColumn < b.sortColumn)) {
    number = -1;
  } else if ((a.heightValueStart > b.heightValueStart) || (a.sortColumn > b.sortColumn)) {
    number = 1;
  }
  return number;
});

检查以下代码段。

const data = [
  {
    animalrId: 11111111111,
    // "lionId": erer,
    uiuiuiId: '151856658687700',
    ddfdfdf: '2018-02-14 19:03:31',
    category: 'wewe5454',
    organizationName: 'apple boy',
    jioID: 'fdkldfkl',
    jioIDType: 'EIN',
    heightValueStart: 'c',
    formattedjioID: '8989-23892389',
    lowerOrgName: 'apple boy',
    animalNumbersRank: [
      {
        number: 'c',
      },
    ],
    dklfkldf: [
      {
        number: '1548267230',
      },
    ],
    jkkklkl: [
      {
        number: '21468096',
        expired: 'Y',
      },
    ],
    sortColumn: 'c',
  },

  {
    animalrId: 222222222222,
    lionId: 232323,
    uiuiuiId: '153920398625500',
    ddfdfdf: '2018-10-10 19:02:45',
    category: 'wewe 2323',
    organizationName: 'b',
    jioID: 'fdkldfkl',
    jioIDType: 'EIN',
    heightValueStart: 'b',
    formattedjioID: '8989-23892389',
    lowerOrgName: 'apple boy',
    sortColumn: '',
  },

  {
    animalrId: 33333333333,
    lionId: 232323,
    uiuiuiId: '153920398625500',
    ddfdfdf: '2018-10-10 19:02:45',
    category: 'wewe 545445',
    organizationName: 'apple boy',
    jioID: 'fdkldfkl',
    jioIDType: 'EIN',
    heightValueStart: 'a',
    formattedjioID: '8989-23892389',
    lowerOrgName: 'apple boy',
    animalNumbersRank: [
      {
        number: 'a',
      },
    ],
    dklfkldf: [
      {
        number: '1548267230',
      },
    ],
    jkkklkl: [
      {
        number: '475255',
      },
      {
        number: '299993436',
        expired: 'Y',
      },
    ],
    sortColumn: 'a',
  },
];

const sortedData = data.sort((a, b) => {
  let number = 0;
  if ((a.heightValueStart < b.heightValueStart) || (a.sortColumn < b.sortColumn)) {
    number = -1;
  } else if ((a.heightValueStart > b.heightValueStart) || (a.sortColumn > b.sortColumn)) {
    number = 1;
  }
  return number;
});

console.log(sortedData); 

关于javascript - 如何根据多个条件对对象集合进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57709072/

相关文章:

javascript - 如何在 jQuery 中获取相同命名的最大类元素长度?

javascript - 如何配置 Angular 2 路由器从/src 子文件夹运行

javascript - AngularJS 如何测试期望任何参数

javascript - 动态创建模板 - Meteor

c++ - 从2D数组中减去min

无法使用数字键作为字符串的 PHP 数组

arrays - 在 Swift 中从 ImagePickerControllerImageURL 保存并附加 UserDefaults 中的数组

javascript - 按字符串属性值对对象数组进行排序

javascript - Node v.8.1.3 sort() 方法运行不正确?

python - 如何找到赢家通吃的最高值(value)