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

Javascript 使用递归函数添加键

Javascript 使用递归函数添加键,javascript,node.js,Javascript,Node.js,我有一个JSON: { "my_obj": [ { "qte": [ { "qte1": "2", "somthing": "toto" }, { "qte1": "1", "somthing":

我有一个JSON:

{
    "my_obj": [
        {
            "qte": [
                {
                    "qte1": "2",
                    "somthing": "toto"
                },
                {
                    "qte1": "1",
                    "somthing": "tata"
                }
            ]    
        },
        {
            "qte": [
                {
                    "qte1": "77"
                },
                {
                    "somthing": "titi"
                }
            ]    
        }
    ]
}
我需要使用递归或一些函数nodej添加所有键“qte1”,这样可以得到如下结果:

{
    "sumQte" : 80

}

致以最诚挚的问候

有很多方法可以解决您的问题。这可能不是最优的

const test = {
      "my_obj": [
          {
              "qte": [
                  {
                      "qte1": "2",
                      "somthing": "toto"
                  },
                  {
                      "qte1": "1",
                      "somthing": "tata"
                  }
              ]
          },
          {
              "qte": [
                  {
                      "qte1": "77"
                  },
                  {
                      "somthing": "titi"
                  }
              ]
          }
      ]
  };
  let sum = 0;
  test.my_obj.map(obj => {
    obj.qte.map(obj2 =>{
      if(obj2.qte1 != null){
      sum+=parseInt(obj2.qte1);
      }
    });
  });
  console.log(sum);
var obj={“my_obj”:[{“qte”:[{“qte1”:“2”,“somthing”:“toto”},{“qte1”:“1”,“somthing”:“tata”}},{“qte”:[{“qte1”:“77”},{“somthing”:“titi”}}};
函数getQte1(obj){
if(obj instanceof Array){//如果这是一个数组
var总和=0;
对象forEach(函数(o){
sum+=getQte1(o);
});
回报金额;
}
//否则它就是一个物体
var总和=0;
//如果它具有属性qte(数组),则将结果添加到sum中
if(obj.qte!==未定义)
sum+=getQte1(对象qte);
//如果它具有属性qte1(数字),则将结果添加到sum中
if(obj.qte1!==未定义)
sum+=parseInt(对象qte1);
回报金额;
}

日志(getQte1(obj.my_obj))您可以使用迭代和递归方法来检查真实性,或者是否找到了键,或者实际数据是否是对象,然后再次调用该函数

它适用于任何深度

函数getSum(对象,键){ 返回对象。键(对象)。减少(函数(s,k){ 如果(!对象[k]){ 返回s; } 如果(k==键){ 返回s++对象[k]; } if(对象的类型[k]=“对象”){ 返回s+getSum(对象[k],键); } 返回s; }, 0); }; var数据={my_obj:[{qte:[{qte1:“2”,somthing:“toto”},{qte1:“1”,somthing:“tata”}]},{qte:[{qte1:“77”},{somthing:“titi”}]}, sum=getSum(数据“qte1”);
控制台日志(总和)这很简单。到目前为止,您尝试过什么?我尝试过使用递归。您能否重新格式化您的问题代码,以提供输入和所需输出的确切示例?我现在不确定你想做什么,我想这是很清楚的。我只需要添加所有关键点“qte1”,因为您没有显示自己的尝试,所以您将获得向下投票和关闭投票。现在,它读起来好像你想让别人为你做你的工作。如果您向我们展示您的尝试以及失败的原因,我们可以指导您找到解决方案,而不是交付您需要的代码…谢谢@Nina ScholzThanks@LordMarty@Charuka编辑应该是为了增强代码,而不是恶化代码。