【问题标题】:Javascript -sort array based on another javascript object propertiesJavascript - 基于另一个 javascript 对象属性的排序数组
【发布时间】:2019-11-18 23:29:41
【问题描述】:

我有一个 javascript 数组和一个对象。需要帮助根据另一个数组中的订单号对 javascript 对象键进行排序

在子组数组中,我有名称、订单号。需要根据该订单号对产品键进行排序

const subgroup = [
        {
            "code": "6748",
            "name": "test123",
            "orderNumber": "0"
        },
        {
            "code": "1234",
            "name": "customdata",
            "orderNumber": "1"
        }
    ]

 const offerings = {
        "customdata" : [
    {
        "code": "Audi",
        "color": "black"
      }
    ],
        "test123" : [
    {
        "brand": "Audi",
        "color": "black"
      }
    ]
 }

【问题讨论】:

  • 请附上您到目前为止所尝试的内容
  • 您的标题显示“排序数组”,但随后您的代码显示了一个要排序的普通对象(不是数组)。当您需要特定顺序时,不要使用普通对象,而是使用数组。

标签: javascript arrays sorting object compare


【解决方案1】:

我相信这应该适合你。我在代码中添加了一些 cmets,希望可以很好地解释正在发生的事情。

var subgroup = [{
    "code": "6748",
    "name": "test123",
    "orderNumber": "0"
  }, {
    "code": "1234",
    "name": "customdata",
    "orderNumber": "1"
  }];

var offerings = {
    "customdata": [{
        "code": "Audi",
        "color": "black"
    }],
    "test123": [{
        "brand": "Audi",
        "color": "black"
    }]
}

function sortObjectFromArray(refArray, sortObject, orderKey = 'order', linkKey = 'key') {
  // Get copy of refArray
  let reference = refArray.slice();

  // Sort sortObject [ into an array at this point ]
  let sorted = [];
  for (let key in sortObject) {
    // Searches the refArray for the linkKey, and returns the intended index
    let index = reference.find((item) => item[linkKey] === key)[orderKey];
    // Places the sortObject's value in the correct index of the 'sorted' Array
    sorted[parseInt(index)] = [key, sortObject[key]];
  };

  // Return an object, created from previous 'sorted' Array
  return sorted.reduce((obj, [key, value]) => {
    obj[key] = value;
    return obj;
  }, {});
};

offerings = sortObjectFromArray(subgroup, offerings, 'orderNumber', 'name');

console.log(offerings);

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2013-05-17
    • 2019-05-02
    相关资源
    最近更新 更多