遍历对象 并修改匹配到的对象

447 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport"
    content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
</head>

<body>
  <div id="app"></div>
  <script>
    // 设置一个全局变量 方便修改
    let g_name = 'ppp'
    let inventory = [
      {
        name: 'apples', quantity: 2,
        children: [{
          name: 'apples1',
          quantity: 10
        }]
      },
      {
        name: 'bananas', quantity: 0,
        children: [{
          name: 'bananas1',
          quantity: 10
        }]
      },
      {
        name: 'cherries', quantity: 5,
        children: [{
          name: 'cherries1',
          quantity: 10
        }]
      }
    ];
    function findCherries(fruit) {
      return fruit.name === g_name;
    }
    
    function editObject(v, items){
      items.forEach(el => {
        // 给这个全局变量赋值 改变 findCherries find里怎么传参?
        g_name = v
        let _name = items.find(findCherries)
        if(_name != undefined){
          // 模拟接口返回的数据
          _name.children = {
            name: 'qqqqqqqqqqqqqq',
            quantity: 10
          }
        } else {
          // 递归调用
          if(el.children != undefined) {
            editObject(v, el.children)
          }
        }
      })
    }
    
    window.onload = function(){
      editObject('apples1', inventory)
      document.querySelector('#app').innerHTML = JSON.stringify(inventory)
    }

  </script>
</body>

</html>