Javascript使用复杂数组

时间:2014-10-18 13:31:29

标签: javascript arrays

  • 我有一个对象数组,我的customerOrder数组。数组中的每个Object都包含一个customerID。多个订单可以具有相同的customerID。
  • 我还有第二个对象数组,我的客户数组。
  • 我的目标是从customerOrder数组中获取每个对象,并将它们分类为由customerID分组的较小数组,以便我可以将每个单独的较小数组中的每一个作为客户数组中键/值对中的值。

这是两个数组中每个数组中的一个对象的样子。

      customerOrderArray = ( {
          orderID: '',
          orderType: '',
          customerID: ''
     })

     customerArray = ( {
          ID: '',
          customerName: '',
          customerCity: ''
     })

这是我尝试过的代码。这导致只有一个orderObject附加到它迭代的最后一个customerObject。

     for (var k = 0; k < customerOrderArray.length; k++) {
            for (j = 0; j < customerArray.length; j++) {

            allJobs = new Array();

                if (customerArray[j].ID == customerOrderArray[k].CustomerID) {

                   if("allJobs" in customerArray[j]) {
                        customerArray[j].allJobs.push(customerOrderArray[k]);
                    }

                    else {

                        customerArray[j].allJobs.push(customerOrderArray[k]);
                    }

                    break;
                }
            }
        }

如果有什么我可以扩展帮助澄清问题,或者如果对更广泛的图片的解释可能有助于我知道。我可能正在接近这个问题。我感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你希望结果是一个对象,其中customerID是一个键,值是一个包含name,city和allJobs的对象,属于这个键。

var orderLength = customerOrderArray.length,
    customLength = customerArray.length,
    customerObject = {};

for (var i = 0; i < customLength; i++) { // iterate over customerArray
    var cAi = customerArray[i],
        id = cAi.ID,
        // create an value-object with name, city and an empty allJobs-array
        val = {name: cAi.customerName, city: cAi.customerCity, allJobs: []};

    // iterate over customerOrderArray to find all orders belonging to this id
    for (var o, j = 0; j < orderLength; j++) {
        o = customerOrderArray[j]; 
        // if id is the same push this job into allJobs
        if (o.customerID == id) val.allJobs.push(o);
    }
    // insert this customer into customerObject, key is id and value is val
    customerObject[id] = val;
}

因此,如果您的客户有id&#39; user25&#39;说两个工作,看customerObject['user25']给出:

{
    name: 'Ben',
    city: 'New York',
    allJobs: [
        {orderId: 123, orderType: 'mail', customerID: 'user25'},
        {orderId: 124, orderType: 'phone', customerID: 'user25'}
    ]
}

原始数组不会更改。如果customerOrderArray可能在运行时被清空,则可以更快地完成。

如果我误解了某些内容,或者这不合适,请发表评论。