函数返回对象而不是数组,无法进行.Map

时间:2020-08-07 11:53:44

标签: javascript

我正在解析订单供稿,以识别已购买的重复物品,并将它们与要上传的数量分组。但是,当我尝试映射结果数组时,它显示的是[object Object],这使我认为某些东西正在将返回值转换为对象而不是数组。

功能如下:

function compressedOrder (original) {
    var compressed = [];
    // make a copy of the input array

  // first loop goes over every element
    for (var i = 0; i < original.length; i++) {

        var myCount = 1;    
        var a = new Object();
        // loop over every element in the copy and see if it's the same
        for (var w = i+1; w < original.length; w++) {
          if (original[w] && original[i]) {
            if (original[i].sku == original[w].sku) {
        // increase amount of times duplicate is found
                myCount++;
                delete original[w];
            }
          }
        }
          if (original[i]) {
                a.sku = original[i].sku;
                a.price = original[i].price;
                a.qtty = myCount;
                compressed.push(a);
          }
    }
    return compressed;
}

调用该函数的JS代码是:

contents: compressedOrder(item.lineItems).map(indiv => ({
      "id": indiv.sku,
      "price": indiv.price,
      "quantity": indiv.qtty
    }))

结果是:

内容:[[对象],[对象],[对象],[对象]]

当我对输出进行JSON.stringify()时,我可以看到它正在从函数中提取正确的信息,但是我不知道如何获取调用函数以将其提取为可以映射的数组而不是作为对象。

正确的输出应位于如下所示的更大的供稿中:

内容: [{“ id”:“ sku1”,“价格”:17.50,“数量”:2},{“ id”:“ sku2”,“价格”:27.30,“数量”:3}]

{这可能是简单而显而易见的事情,但是直到今天凌晨4点,我一直在为这个(更大的)程序打断头,所以我的头可能不在正确的位置}

3 个答案:

答案 0 :(得分:0)

结果证明代码始终是正确的,但是我遇到了控制台本身的限制。我能够通过简单地使用硬编码的值,然后分别查询嵌套数组来验证这一点。

仍然感谢您的帮助,并向大家提供了意见。

答案 1 :(得分:-1)

contents: compressedOrder(item.lineItems).map(indiv => ({
      "id": indiv.sku,
      "price": indiv.price,
      "quantity": indiv.qtty
    }))

在compressedOrder功能上方的代码中,返回一个对象数组,其中每个对象都具有sku,price和qtty属性。 此外,您正在此数组上使用地图,并再次返回具有id,price和数量属性的对象。

您对此有何期待?

答案 2 :(得分:-1)

不确定需要什么解决方案,但我已经阅读了您的问题和评论,看来您需要数组作为响应。

因此,如果我正确理解了您的要求,并且可以使用lodash,那么以下代码段可能会为您提供帮助:

const _ = require('lodash');
const resp = [{key1:"value1"}, {key2:"value2"}].map(t => _.pairs(t));
console.log(resp);

P.S。假定compressedOrder响应看起来像对象数组。