Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting - Fatal编程技术网

JavaScript:根据给定的字段数组对对象数组进行动态排序

JavaScript:根据给定的字段数组对对象数组进行动态排序,javascript,sorting,Javascript,Sorting,我试图用JavaScript编写一个helper函数,它接受一个未排序的对象数组和一个字段数组,并根据给定的字段对数组进行排序。以下是我目前掌握的情况: const sortByFieldsInPlace = (arr, fieldNames) => { arr.sort((a, b) => { for (const field of fieldNames) { if (a[field] > b[field]) return 1; if (a

我试图用JavaScript编写一个helper函数,它接受一个未排序的对象数组和一个字段数组,并根据给定的字段对数组进行排序。以下是我目前掌握的情况:

const sortByFieldsInPlace = (arr, fieldNames) => {
  arr.sort((a, b) => {
    for (const field of fieldNames) {
      if (a[field] > b[field]) return 1;
      if (a[field] < b[field]) return -1;
    }
  });
};

这看起来不错,还是有人有更好的解决方案?

我觉得您的解决方案不错,我会在for循环之外添加一个最终的“return 0”,以涵盖被比较对象相同的情况。除此之外,我想你已经办到了

这回答了你的问题吗。一定要超越公认的答案-解决多属性问题。
String.prototype.localeCompare()
-代码有什么问题?您的方法简洁明了。除非您希望提高性能,否则这是理想的IMO。您可以用两行替换4行排序谓词:
let field=fieldNames.find(field=>a[field]!==b[field]);返回场?a[field].localeCompare(b[field]):0但这只适用于字符串值。很好的调用。还可以防止控制台日志警告说
预期将在箭头函数末尾返回值
const arr1 = [
  { name: 'A', code: 'D' },
  { name: 'B', code: 'A' },
  { name: 'A', code: 'Z' },
  { name: 'A', code: 'A' },
  { name: 'B', code: 'D' },
  { name: 'B', code: 'B' },
  { name: 'B', code: 'B' }
];
sortByFieldsInPlace(arr1, ['name', 'code'])
console.log(arr1)
// [
//   { name: 'A', code: 'A' },
//   { name: 'A', code: 'D' },
//   { name: 'A', code: 'Z' },
//   { name: 'B', code: 'A' },
//   { name: 'B', code: 'B' },
//   { name: 'B', code: 'B' },
//   { name: 'B', code: 'D' }
// ]

const arr2 = [
  { name: 'A', code: 'D' },
  { name: 'B', code: 'A' },
  { name: 'A', code: 'Z' },
  { name: 'A', code: 'A' },
  { name: 'B', code: 'D' },
  { name: 'B', code: 'B', status: 10 },
  { name: 'B', code: 'B', status: 9 }
];
sortByFieldsInPlace(arr2, ['name', 'code', 'status'])
console.log(arr2)
// [
//   { name: 'A', code: 'A' },
//   { name: 'A', code: 'D' },
//   { name: 'A', code: 'Z' },
//   { name: 'B', code: 'A' },
//   { name: 'B', code: 'B', status: 9 },
//   { name: 'B', code: 'B', status: 10 },
//   { name: 'B', code: 'D' }
// ]