首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript在另一个数组中找到嵌套对象并进行数学计算

javascript在另一个数组中找到嵌套对象并进行数学计算
EN

Stack Overflow用户
提问于 2021-10-14 17:29:49
回答 1查看 91关注 0票数 0

我需要在“附件”数组中从'products.accessories‘数组中找到两个嵌套对象,并检查它们的货币与奇偶乘,检查它们的单位乘以’Products.properties. result‘,用它们的'qty’乘以每个对象,并将它们的结果相加。

任何建议都是非常感谢的。谢谢。

代码语言:javascript
复制
var accessories = [{
  name: 'Accessory-1',
  currency: 'eur',
  price: 1,
  unit: 'm'
},
{
  name: 'Accessory-2',
  currency: 'usd',
  price: 2,
  unit: 'pcs'
}];

var products = [{
  name: 'Product',
  properties: [{
    no: 'Product-1',
    length: '2000',
    accessories: [{
      name: 'Accessory-1',
      qty: 1
    },
    {
      name: 'Accessory-2',
      qty: 1
    }]
  }]
}];
代码语言:javascript
复制
// currencies
let eurusd = 1.18
let gbpusd = 1.38

编辑:谢谢,AlexeyZelenin

代码语言:javascript
复制
    function getPrice(accessory) {
        accessory.unit === 'm' ? unitMultiplier = length / 1000 : unitMultiplier = 1
        return (
            accessory.currency === 'eur' ? (accessory.price * eurusd) : 
                (accessory.currency === 'gbp' ? (accessory.price * gbpusd) : 
                        accessory.price)
                        ).toFixed(2)
    }
代码语言:javascript
复制
    function getAcc(property) { 
        return property.accessories 
            .map(x => x.qty * getPrice(accessories.find(p => p.name === x.name)) * unitMultiplier)
            .reduce((c, p) => c + p)
    }

PUG:

代码语言:javascript
复制
each i in products
     .....
     each j in i.properties
          .....
          length = j.length
          .....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 18:50:25

代码语言:javascript
复制
// Accessories: each accessory might be presented several times with different currencies
var accessories = [
  {
      name: 'Accessory-1',
      currency: 'eur',
      price: 3,
      unit: 'm',
  },
  {
      name: 'Accessory-2',
      currency: 'eur',
      price: 5,
      unit: 'm',
  },
  {
      name: 'Accessory-3',
      currency: 'usd',
      price: 2,
      unit: 'pcs',
  },  
]

// Products - each product has properties with "accessories" inside
var products = [
  {
      name: 'Product',
      properties:
      [
          {
              no: 'Product-1',
              length: '2000',
              accessories: [
                      {
                      name: 'Accessory-1', 
                      qty: 2
                      },
                      {
                      name: 'Accessory-2', 
                      qty: 2
                      },
                      {
                        name: 'Accessory-3', 
                        qty: 1
                        },
                    ]
          },
      ]
  }
];

//currencies
let eurusd = 1.18;
let gbpusd = 1.38;
//functions
function getPrice(product) {
  return (
      product.currency === 'eur' ? (product.price * eurusd) : 
          (product.currency === 'gbp' ? (product.price * gbpusd)     : 
              product.price)).toFixed(2);
}

// The function gets one product as an incoming parameter
// Then gets the list of all accessories for all properties
// Finds the accessory from the global array, calculates right price
// based on accessory currency and multiplies it by accessory quantity
// Then summarises all prices
function getAccessories(product) {
  return product.properties
    .map(x => ({
      accessories: x.accessories.map(b => ({
        ...b, 
        length: +x.length
      }))
    }))
    .flatMap(x => x.accessories) // get all accessories
    .map(x => x.length * x.qty * getPrice(accessories.find(p => p.name === x.name))) // find the price of accessory from global array
    .reduce((c, p) => c + p) // sum prices
    ;
}
console.log(getAccessories(products[0]));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69574976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档