如何在任何级别递归更改JS Object / JSON值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在任何级别递归更改JS Object / JSON值?相关的知识,希望对你有一定的参考价值。

请注意,我提供的结构只是一个例子,但可以是任何东西。

主要目标是在任何级别递归地将我选择的键值更改为我选择的值。

以下是澄清的示例:

    var items = {
      price: 10,
      child: {
        price: 20, 
         child: {
           price: 10
         }
      },
      child2: {
        price: 40,
        child: {
          price: 50,
          child: [{ price: 30 }, { price: 40 }]
        }
      }
    };

鉴于此,您如何将所有价格更改为0?

答案

这是一个大致的想法:

function f(obj, prop, val){
  if (typeof obj == 'object'){
    if (obj.hasOwnProperty(prop))
      obj[prop] = val;
      
    for (let i in obj)
      f(obj[i], prop, val);
  }
}

var items = {
  price: 10,
  child: {
    price: 20, 
     child: {
       price: 10
     }
  },
  child2: {
    price: 40,
    child: {
      price: 50,
      child: [{ price: 30 }, { price: 40 }]
    }
  }
};

f(items, 'price', 0);

console.log(JSON.stringify(items));
另一答案

递归循环并检查密钥price

var items = {  price: 10,  child: {    price: 20,    child: {      price: 10    }  },  child2: {    price: 40,    child: {      price: 50,      child: [{        price: 30      }, {        price: 40      }] }  }};

function loop(obj) {
  if (typeof obj !== 'object') return;
  Object.keys(obj).forEach((k) => {
    if (k === 'price') obj[k] = 0;
    else loop(obj[k]);
  });
}

loop(items);

console.log(items)
.as-console-wrapper { max-height: 100% !important; top: 0; }

以上是关于如何在任何级别递归更改JS Object / JSON值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 中更改终端颜色

Nest.Js 不接受任何更改

three.js - 如何动态更改对象的不透明度?

js 常见的Object方法

使用递归js查找树状对象(不是二叉树)的最低共同祖先

JS 中如何判断数组