将null值替换为数组中的字符串,该数组是JSON输出 - V2.0

时间:2016-11-22 18:42:58

标签: javascript arrays json null

我试图通过字符串值(例如'n / a'或'not specified')提交表单后替换通过JSON获得的null值。我添加了几行@Winter Solider建议,下面注释以检查空值并替换它,但我添加的代码不起作用。想法?
    -thanks

    function submitFormFunction() {
    //document.getElementById("form").submit();
    var valueArray = [
        {
            'label': 'contractId',
            'value': document.getElementById('ContractId').value
        },
        {
            'label': 'title',
            'value': document.getElementById('ContractTitle').value
        },
        {
            'label': 'minYear',
            'value': document.getElementById('MinYear').value
        },
        {
            'label': 'maxYear',
            'value': document.getElementById('MaxYear').value
        },
        {
            'label': 'terminal',
            'value': document.getElementById('Terminal').value
        },
        {
            'label': 'location',
            'value': document.getElementById('Location').value
        },
        {
            'label': 'theme',
            'value': document.getElementById('Theme').value
        },
        {
            'label': 'construction',
            'value': document.getElementById('Construction').value
        },
        {
            'label': 'asBuilt',
            'value': document.getElementById('AsBuilt').value
        }
    ].map(function (param) { return param.label + '=' + param.value; });
    if (valueArray.length) {
        // here I am trying to handle the null value issue as suggested by Winter Soldier 
        for (var i = 0; i < valueArray.length; i++) {
            if (valueArray[i].includes("null")) {
                valueArray[i] = valueArray[i].replace("null", "n/a");
            }
        }
        console.log(valueArray)
        console.log(valueArray.join('&'));

        //var queryStr = JSON.stringify(valueArray.replacer);
        var queryString = valueArray.join('&');
        fetch(searchUrl, '?' + queryString, function (data) {
            // output search results to the dom
            renderSearchResults(JSON.parse(data), document.getElementById('searchResults'));
        });
    } else {
        document.getElementById('searchResults').innerHTML = "Please enter a search term.";
    }
}

4 个答案:

答案 0 :(得分:2)

观察:您正在不必要地使用filter,因为它会在valueArray数组上创建另一个数组。相反,您可以使用forEach。和

<强>解决方案:

if (valueArray.length) { // It'll do the same job as 'valueArraylength > 0'
    // here I am trying to handle the null value issue
    valueArray.forEach(function(value){
        if (value == null || value == "") {
          value = "n/a";
        }
    })
    //var queryStr = JSON.stringify(valueArray.replacer);
    var queryString = valueArray.join('&');
    fetch(searchUrl, '?' + queryString, function (data) {
        // output search results to the dom
        renderSearchResults(JSON.parse(data), document.getElementById('searchResults'));
    });
}

希望这会有所帮助:)

答案 1 :(得分:1)

  • 即使在执行之前,您的空值也会被过滤掉 地图。每当你正在查找的元素中有一个空值时, 它最终被过滤掉了。
  • 所以你最好不要使用过滤器。修改您的代码基于 其他答案。切换到每个或者什么。
  • 虽然我有9个输入,但它只打印8个

请参阅以下代码

       var valueArray = [
            {
                'label': 'contractId',
                'value': 'ContractId'
            },
            {
                'label': 'title',
                'value': 'ContractTitle'
            },
            {
                'label': 'minYear',
                'value': 'MinYear'
            },
            {
                'label': 'maxYear',
                'value': 'MaxYear'
            },
            {
                'label': 'terminal',
                'value': 'Terminal'
            },
            {
                'label': 'location',
                'value': 'Location'
            },
            {
                'label': 'theme',
                'value': 'Theme'
            },
            {
                'label': 'construction',
                'value': 'Construction'
            },
            {
                'label': 'asBuilt',
                'value': null
            }
        ].filter(function (param) { return param.value; })
       console.log(valueArray)
       console.log(valueArray.length)

编辑:

  • 这是在null检查结束时你需要的吗?
  • 如果您尝试用n / a替换空字符串值,则为 也许你需要做什么
  • 编辑代码以重新""检查

var valueArray = [{
  'label': 'contractId',
  'value': 'ContractId'
}, {
  'label': 'title',
  'value': 'ContractTitle'
}, {
  'label': 'minYear',
  'value': 'MinYear'
}, {
  'label': 'maxYear',
  'value': 'MaxYear'
}, {
  'label': 'terminal',
  'value': 'Terminal'
}, {
  'label': 'location',
  'value': 'Location'
}, {
  'label': 'theme',
  'value': ''
}, {
  'label': 'construction',
  'value': 'Construction'
}, {
  'label': 'asBuilt',
  'value': null
}].map(function(param) {
  return param.label + '=' + param.value;
});
if (valueArray.length) {
  // here I am trying to handle the null value issue
  for (var i = 0; i < valueArray.length; i++) {
    if (valueArray[i].includes("null") || !valueArray[i].split("=")[1].length ) {
      valueArray[i] = valueArray[i].split("=")[0] + "=n/a";
    }
  }
  console.log(valueArray)
  console.log(valueArray.join('&'));
  //the rest of your code
}

答案 2 :(得分:0)

它适用于我。也许您还需要检查空字符串?

var valueArray=[5,6,7,8,null,3,4,5,0,0,0,9,''," "]
            for (var i = 0; i < valueArray.length; i++) {
                if (valueArray[i] === null || valueArray[i] === ' ' || valueArray[i] === '') {
                    valueArray[i] = 'n/a';
                }
              console.log(valueArray[i]);
            }

答案 3 :(得分:0)

var valueArray = [{
  'label': 'contractId',
  'value': 'ContractId'
}, {
  'label': 'title',
  'value': 'ContractTitle'
}, {
  'label': 'minYear',
  'value': 'MinYear'
}, {
  'label': 'maxYear',
  'value': 'MaxYear'
}, {
  'label': 'terminal',
  'value': 'Terminal'
}, {
  'label': 'location',
  'value': 'Location'
}, {
  'label': 'theme',
  'value': ''
}, {
  'label': 'construction',
  'value': 'Construction'
}, {
  'label': 'asBuilt',
  'value': null
}];
for (var i = 0; i < valueArray.length; i++) {
                            Object.keys(valueArray[i]).forEach(function (field) {
                            if(valueArray[i][field] == null){
                            valueArray[i][field] = "";
                            }
                            })                   
                    };
                    console.log(valueArray);