Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在嵌套数组中移动元素_Javascript_Arrays - Fatal编程技术网

Javascript 如何在嵌套数组中移动元素

Javascript 如何在嵌套数组中移动元素,javascript,arrays,Javascript,Arrays,我想移动嵌套数组中的元素。这是我的数据: let products = [ { "product_name": "A", "_id": "5ace995c14a759325776aab1", "transactions": [ { "_id": "5ad3a274ac827c165a510f99", "qty": 100, "price": 2000

我想移动嵌套数组中的元素。这是我的数据:

let products = [
    {     
      "product_name": "A",
      "_id": "5ace995c14a759325776aab1",
      "transactions": [
        {
          "_id": "5ad3a274ac827c165a510f99",
          "qty": 100,
          "price": 2000
        },
        {
          "_id": "5ad3a274ac827c165a510f99",
          "qty": 80,
          "price": 1500
        },
      ]
    },
    {
      "product_name": "B",
      "_id": "5ace995914a759325776aab0",
      "transactions": [
        {
          "_id": "5ad3a274ac827c165a510f9b",
          "qty": 80,
          "price": 1500
        }
      ],
    }
  ]
我期望的结果是:

[
  {
    "_id": "5ad3a274ac827c165a510f99",
    "qty": 100,
    "price": 2000,
    "product_name": "A",
  },
  {
    "_id": "5ad3a274ac827c165a510f99",
    "qty": 80,
    "price": 1500,
    "product_name": "A",
  },
  {
    "_id": "5ad3a274ac827c165a510f9b",
    "qty": 80,
    "price": 1500,
    "product_name": "B",
  }
]
然后,我的求解代码:

function move() {
  var result = []
  for (product of products) {
    for (transaction of product.transactions) {
      transaction.product_name = product.product_name
      result.push(transaction)
    }
  }
  return result
}
product = move()

是否有任何有效的方法来创建输出,可能是使用数组映射或其他方法?谢谢。

您可以使用添加
产品名称的
来简化
事务处理

也用于:

  • 对于属性和

  • 用于将变量作为属性,名称作为键

var products=[{产品名称:“A”,交易编号:“5ACE995C14A759325776AB1”,交易编号:[产品编号:“5ad3a274ac827c165a510f99”,数量:100,价格:2000},{产品编号:“5ad3a274ac827c165a510f99”,数量:80,价格:1500},{产品名称:“B”,交易编号:“5ACE995914A759325776AB0”,交易编号:“5AD3A274AC827C165F80,价格:},
结果=产品.reduce((r,{transactions,product_name})=>
r、 concat(transactions.map(t=>Object.assign({},t,{product_name})),
[]
);
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
只需使用js方法,您就可以获得所需的输出

const产品=[
{     
“产品名称”:“A”,
“_id”:“5ACE995C14A759325776AB1”,
“交易”:[
{
“_id”:“5ad3a274ac827c165a510f99”,
“数量”:100,
“价格”:2000年
},
{
“_id”:“5ad3a274ac827c165a510f99”,
“数量”:80,
“价格”:1500美元
},
]
},
{
“产品名称”:“B”,
“_id”:“5ACE995914A759325776AB0”,
“交易”:[
{
“_id”:“5ad3a274ac827c165a510f9b”,
“数量”:80,
“价格”:1500美元
}
],
}
]
让输出=[];
products.forEach(elm=>elm.transactions.forEach(transaction=>{
transaction.product\u name=elm.product\u name;
output.push(事务)});
控制台日志(输出);

您可以
减少
映射
交易以添加产品名称

let result = products.reduce((c,v)=>{                            //Loop the array using reduce
    let transactions = v.transactions.map(o=>{                   //Loop thru each transactions using map
        return Object.assign(o,{"product_name":v.product_name}); //Clone the transaction and add the property product_name
    });
    return c.concat(transactions);                               //Merge the current array and the transactions
},[]);
以下是一个片段:

//您的数组
让产品=[{“产品名称”:“A”,“交易编号”:“5ACE995C14A759325776AB1”,“交易编号”:[{“产品编号”:“5ad3a274ac827c165a510f99”,“数量”:100,“价格”:2000},{“交易编号”:“5ad3a274ac827c165a510f99”,“数量”:80,“价格”:1500},},{“产品名称”:“B”,“交易编号”:“5ACE995914A759725776AB0”,“交易编号”:“5AD3AU
//简本
让result=products.reduce((c,v)=>c.concat(v.transactions.map(o=>Object.assign(o,{“product_name”:v.product_name})),[];
控制台日志(结果)