不用正则表达式,根据字符串计算结果


  const data = [{
    id: 1,
    index: 1,
    value: 50,

  }, {
    id: 1,
    index: 2,
    value: 20
  },
  {
    id: 10,
    index: 1,
    value: 30,
  },
  {
    id: 12,
    index: 1,
    value: 45,
  }
  ]

  const string= "sum(<id:1> * <id:10>) + <id:12>";
  fun(string,data){ }

  console.log(fun(string,data))    //  2145 
50*30+20*30+45
let valeu=data[0].value*data[2].value+data[1].value*value+data[2].value+value+data[3].value

你循环一下 不就好了 。判断 id 呗

 const data = [{
      id: 1,
      index: 1,
      value: 50,

   }, {
      id: 1,
      index: 2,
      value: 20
   },
   {
      id: 10,
      index: 1,
      value: 30,
   },
   {
      id: 12,
      index: 1,
      value: 45,
   }
   ]; 
   let v=sumId(data,[1,10,12]);
   console.log(v)
   function sumId(arr,ids){
      let sum=0;
      arr.map((item)=>{
         if(ids.indexOf(item.id&&item.id)>-1){
            if(item.value)  sum+=Number(item.value);
         }
      })
      return sum;
   }


<script type="text/javascript">
            const data = [{
                    id: 1,
                    index: 1,
                    value: 50,

                }, {
                    id: 2,
                    index: 2,
                    value: 20
                },
                {
                    id: 10,
                    index: 1,
                    value: 30,
                },
                {
                    id: 12,
                    index: 1,
                    value: 45,
                }
            ]

            const string1 = "sum(<id:1> * <id:10>) + <id:12>";
            
            function fun(string1, data) {
                var string2 = string1.split('id:')
                const arr = []
                for(i=0;i<string2.length;i++){
                    if(string2[i].indexOf('>')>-1){
                        const index = string2[i].indexOf('>')
                        arr.push(Number(string2[i].substring(0,index)))
                    }
                }
                let sum=0;

                  data.map((item)=>{
                     if(arr.indexOf(item.id)>-1){
                       sum+=item.value
                     }
                  })
                  return sum

            }

            console.log(fun(string1, data))
        </script>