【问题标题】:Create Dymanic JSON string using only Javascript仅使用 Javascript 创建动态 JSON 字符串
【发布时间】:2018-01-09 21:15:12
【问题描述】:

我正在使用 Code Canyon 脚本 Spin2Win (https://codecanyon.net/item/spin2win-wheel-spin-it-2-win-it/16337656),它使用本地 JSON 文件来创建分段。

控制分段的 JSON 文件部分具有以下格式。

 "segmentValuesArray" : [
   {"probability":10, "type": "string", "value": "$10^Coupon", "win": true, "resultText": "You won a $10 Coupon", "userData": {"score":0}},

   {"probability":30, "type": "string", "value": "Lose", "win": false, "resultText": "Thank you for Playing", "userData": {"score":0}},

   {"probability":5, "type": "string", "value": "$25^Coupon", "win": true, "resultText": "You won a $25 Coupon", "userData": {"score":0}},

   {"probability":30, "type": "string", "value": "Lose", "win": false, "resultText": "Thank you for Playing", "userData": {"score":0}},

   {"probability":2, "type": "string", "value": "Free Spin", "win": true, "resultText": "You Won a Free Spin", "userData": {"score":0}},

   {"probability":30, "type": "string", "value": "Lose", "win": false, "resultText": "Thank you for Playing", "userData": {"score":0}},

   {"probability":3, "type": "string", "value": "SWAG", "win": true, "resultText": "You won SWAG", "userData": {"score":0}},

   {"probability":30, "type": "string", "value": "Lose", "win": false, "resultText": "Thank you for Playing", "userData": {"score":0}},

   {"probability":1, "type": "string", "value": "GOOGLE^Home", "win": true, "resultText": "You won a Google Home", "userData": {"score":0}}
  ],

我的问题是我有一张 50 美元和 100 美元的优惠券,它们的概率值较低。但我在任何时候都只想要轮子上的 2 张优惠券。所以我的想法是随机选择一个优惠券值,然后在旋转脚本处理 json 之前使用查找和替换更新到两个优惠券段。

我已经测试过了,可以给segmentValueArrary加一个ID标签,如下:

 {"id":"01", "probability":10, "type": "string", "value": "$10^Coupon", "win": true, "resultText": "You won a $10 Hosting Coupon", "userData": {"score":0}},

我找到了这个答案:JSON Object array inside array find and replace in javascript

但它只给出了如何替换一个值的示例,我需要替换概率、值和 resultText 任何修改代码的尝试查找和替换代码都失败了。

***** 更新 #1 *****

我玩过一些代码并开始在 Jsfiddle 中工作。 (http://jsfiddle.net/6347s9bo/)

我现在遇到的问题是开发人员如何加载和处理 JSON。这是他的代码

   loadJSON(function(response) {
     // Parse JSON string to an object
     var jsonData = JSON.parse(response);
     ........

这是他的 loadJSON 函数

  function loadJSON(callback) {
  var xobj = new XMLHttpRequest();
  xobj.overrideMimeType("application/json");
  xobj.open('GET', './wheel_data.json', true); 
  xobj.onreadystatechange = function() {
    if (xobj.readyState == 4 && xobj.status == "200") {
      //Call the anonymous function (callback) passing in the response
      callback(xobj.responseText);
    }
  };
  xobj.send(null);
 }

我现在得到的错误是 object.map 不是一个函数。我将 findAndReplace() 调用放在他的 JSON.parse 调用之后,这应该将文本转换为对象。

不知道我错过了什么

【问题讨论】:

    标签: javascript arrays json


    【解决方案1】:

    你可以试试这个:

    function changeAttributes(objArray, objId, probability, value, resultText) {
        objArray.forEach(function(obj) {
            if (obj.id === objId) {
                obj.probability= probability;
                obj.value = value;
                obj.resultText = resultText;
            }
        });
    }
    

    objId 是要替换的 Array 中对象的 Id。 这 3 个值是您要设置的新值。 您必须调用该方法2次,每张优惠券一次才能替换属性。

    【讨论】:

      【解决方案2】:

      不确定是否完全理解您的问题。 JSON 基本上是一个 javascript 数组。因此更新它不需要将其转换为字符串。在数组中查找值非常简单。在你的情况下,只需创建一个这样的函数:

      function isCoupon(item) {
          return item.id === '01';
      }
      

      然后像这样搜索它:

      arrayItem = segmentValuesArray.find(isCoupon);
      arrayItem.value.replace('10^','100^');
      

      【讨论】:

        【解决方案3】:

        所以我会遍历列表并相应地改变优惠券。您将不得不添加额外的逻辑来处理随机选择您正在选择的优惠券,但我认为这是一个开始的地方。

        segmentValuesArray.forEach(segment => {
          if (segment.value.includes("Coupon")) {
             segment.probability = 0;
             segment.resultText = '';
          }
        });
        

        参考包括:

        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes

        对 forEach 的引用:

        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-05
          • 1970-01-01
          • 2021-12-11
          • 1970-01-01
          • 1970-01-01
          • 2011-07-26
          • 1970-01-01
          相关资源
          最近更新 更多