Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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_Json - Fatal编程技术网

如何检索除一个属性/级别(Javascript)之外的对象嵌套数组的版本

如何检索除一个属性/级别(Javascript)之外的对象嵌套数组的版本,javascript,arrays,json,Javascript,Arrays,Json,我想检索一个不包含详细信息的对象版本。或者换句话说,我想检索嵌套对象数组中除Trades元素之外的所有元素 最好的方法是什么?每个级别上的属性列表实际上比这个级别长得多。是否有一种方法可以在某个级别上复制除一个属性之外的所有属性?或除一个级别外的所有级别:离开交易但删除其交易节点) 我找到了这样一种方法: const pfSummary = JSON.parse(JSON.stringify(portfolios)); var key; pfSummary.forEach(function (p

我想检索一个不包含详细信息的对象版本。或者换句话说,我想检索嵌套对象数组中除Trades元素之外的所有元素

最好的方法是什么?每个级别上的属性列表实际上比这个级别长得多。是否有一种方法可以在某个级别上复制除一个属性之外的所有属性?或除一个级别外的所有级别:离开交易但删除其交易节点)

我找到了这样一种方法:

const pfSummary = JSON.parse(JSON.stringify(portfolios));
var key;
pfSummary.forEach(function (pf) {
  for (x in pf) {
    key = x;
    break;
  }
  pf[key].Orders.forEach(function (or) {
    for (x in or) {
      key = x;
      break;
    }
    delete or[key].Trades;
  });
});
这很有效。我相信有更好的方法可以做到这一点,例如,如何正确检索对象的密钥

更好的解决方案

阿卡宾改进的解决方案:

pfSummary.forEach(pf => {
  let pfKey = Object.keys(pf);  
  pf[pfKey].Orders.forEach(or => {
    let orKey = Object.keys(or);
    delete or[orKey].Trades;
  });
});

这样的办法应该行得通

let pfSummary = [{
  "SP": {
    "countOrders": 47,
    "count": 0,
    "Orders":  [{
      "81803965": {
        "symbol": "RFX",
        "description": "REDFLOW LTD",
        "Trades": {
          "Trade": [{
            "conId": "81803965",
            "tradeId": "17891517",
            "transactionId": "51996490",
          }]
        }
    }
    }]
  }
}]



pfSummary.forEach(el =>{
    let name =  Object.keys(el);
    for (const key of Object.entries(el[name].Orders[0])) {
        delete key[1].Trades['Trade'];
    }
})

console.log('pfSummary', pfSummary)


我会调查的,谢谢。然而,SP不是一个键名,而是一个命名键,就像Orders对象中的键一样。只是将其更新为包含一种绕过随机键名的方法。这只会从第一个订单中删除交易。但是你找回钥匙的方法帮了我。为问题添加了修改后的解决方案。很高兴我至少能帮助您做到这一点。您希望生成的数据是什么样的?
let pfSummary = [{
  "SP": {
    "countOrders": 47,
    "count": 0,
    "Orders":  [{
      "81803965": {
        "symbol": "RFX",
        "description": "REDFLOW LTD",
        "Trades": {
          "Trade": [{
            "conId": "81803965",
            "tradeId": "17891517",
            "transactionId": "51996490",
          }]
        }
    }
    }]
  }
}]



pfSummary.forEach(el =>{
    let name =  Object.keys(el);
    for (const key of Object.entries(el[name].Orders[0])) {
        delete key[1].Trades['Trade'];
    }
})

console.log('pfSummary', pfSummary)