如何映射两个不同长度的数组? (JavaScript)的

时间:2018-02-19 15:33:24

标签: javascript multidimensional-array

所以,我有两个包含价格的数组。一个是基本价格,另一个是添加剂

    const fees = [{
         price: 5,
         title: "normal tarif"
    }, {
         price: 2.5,
         title: "coupon"
    }];

    const extras = [{
      price: 2.00,
      title: "Extra natchos"
    }, {
      price: 2.00,
      title: "Extra sauce"
    }, {
      price: 3.00,
      title: "Extra spicy"
    }];

    const combinedArray = fees.map((x, i) => [x.price, x.price + extras[i].price]);
    
    console.log(combinedArray);

现在,我需要将它们重新映射到一个新的数组,它会将它们的价格加在一起,但是,我现有的代码只能达到第一个数组中元素的数量。

如何制作它以便它将映射第二个数组中的所有元素?

2 个答案:

答案 0 :(得分:3)

您可以添加给定数组的所有价格,并返回一个新数组,其中包含每个数组的总和。

var fees = [{ price: 5, title: "normal tarif" }, { price: 2.5, title: "coupon" }],
    extras = [{ price: 2.00, title: "Extra natchos" }, { price: 2.00, title: "Extra sauce" }, { price: 3.00, title: "Extra spicy" }],
    prices = [fees, extras]
        .map(a => a
            .map(({ price }) => price)
            .reduce((a, b) => a + b, 0));
 
console.log(prices);

答案 1 :(得分:0)

要将两个数组合并为一个,您需要更多操作。这是示例代码:

const fees = [{
  price: 5,
  title: "normal tarif"
}, {
  price: 2.5,
  title: "coupon"
}];

const extras = [{
  price: 2.00,
  title: "Extra natchos"
}, {
  price: 2.00,
  title: "Extra sauce"
}, {
  price: 3.00,
  title: "Extra spicy"
}];

const combinedArray = [].concat(...fees.map(fee => extras.map(extra => fee.price + extra.price)));

console.log(combinedArray);

内部部件通过将每个fee映射到feeextra的数组来创建二维数组,[].concat(...array2D)部分将其转换为一维阵列。