【问题标题】:Sort object properties in an array based on another custom array [duplicate]根据另一个自定义数组对数组中的对象属性进行排序[重复]
【发布时间】:2019-06-11 07:12:53
【问题描述】:

我有一个对象数组

item_array = [{
                "Email Address": "c",
                "First Name": "a",
                "Last Name": "b",
                "Permission": "Training Administrator",
                "Telephone": "d",
                "User Group": "Company Administrator"
            },
            {
                "Email Address": "3",
                "First Name": "1",
                "Last Name": "2",
                "Permission": "6",
                "Telephone": "4",
                "User Group": "5"
            }];

如何通过给定数组对这个数组进行排序

item_order = ["First Name", "Last Name", "Email Address", "Permission", "Telephone", "User Group"];

我需要像给定数组一样对对象的对象数组进行排序

iteam_order

预期结果

item_array = [{
                "First Name": "a",
                "Last Name": "b",
                "Email Address": "c",
                "Permission": "Training Administrator",
                "Telephone": "d",
                "User Group": "Company Administrator"
            },
            {
                "First Name": "1",
                "Last Name": "2",
                "Email Address": "3",
                "Permission": "6",
                "Telephone": "4",
                "User Group": "5"
            }];

【问题讨论】:

  • 不,我需要按给定的自定义数组而不是字母顺序对这个对象数组进行排序
  • 在 JavaScript 中,排序是针对数组的,而不是针对对象的。有关详细答案和可能的替代方案,请参阅链接的帖子。

标签: javascript jquery arrays


【解决方案1】:

您可以像这样使用mapreduce

const item_array = [{"Email Address":"c","First Name":"a","Last Name":"b","Permission":"Training Administrator","Telephone":"d","User Group":"Company Administrator"},{"Email Address":"3","First Name":"1","Last Name":"2","Permission":"6","Telephone":"4","User Group":"5"}],
      item_order = ["First Name","Last Name","Email Address","Permission","Telephone","User Group"];

const ordered = item_array.map(item =>
    item_order.reduce((acc, key) => ( acc[key] = item[key], acc ), {})
);

console.log(ordered)

【讨论】:

    【解决方案2】:

    以引用数组索引为排序顺序,在sort函数中实现排序逻辑,提取对象的key,按照给定数组排序,将排序后的对象压入原数组。

    var item_array = [{ "Email Address": "c", "First Name": "a", "Last Name": "b", "Permission": "Training Administrator",  "Telephone": "d", "User Group": "Company Administrator" }, {"Email Address": "3", "First Name": "1", "Last Name": "2", "Permission": "6", "Telephone": "4", "User Group": "5"}];
    var item_order = ["First Name", "Last Name", "Email Address", "Permission", "Telephone", "User Group"];
    item_array.forEach((obj, idx, arr) => {
               arr[idx] = Object.keys(obj)
                                .sort((a, b) => {
                                 return item_order.indexOf(a) - item_order.indexOf(b);
                                 })
                                .reduce((acc, ele)=>{acc[ele] = obj[ele]; return acc;},{});
                      });
    
    console.log(item_array);
          

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2015-06-17
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多