使用空字符串交换未定义的值

时间:2014-09-04 20:35:00

标签: javascript jquery json backbone.js

我在骨干应用程序中有一个parse方法,它从数组中构建一个JSON对象,但是如果一个值为空,则它被写为undefined,这会破坏其他方法的行为,我需要将未定义的值设置为空字符串,我很难做到这一点,非常感谢任何帮助。

注意:在这种情况下,我试图将value的值设置为空字符串,如果obj [key] = undefined

代码:

 parse: function(data){
    return data.map(function(obj){
      var key = Object.keys(obj)[0];
      return {
        attribute: key,
        value: obj[key]
      };
   });
 }

toQueryString: function(){
  var obj = this.toQueryData(),
    qs = [];
  for (key in obj) {
    qs.push(key + "=" + obj[key]);
  }
  return qs.join('&')
},
toQueryData: function(){
  return this.reduce(function(memo, model){
    memo[model.get('attribute')] = model.get('value');
    return memo
  }, {});
}

4 个答案:

答案 0 :(得分:2)

使用三元条件:

value: obj[key] ? obj[key] : ""

或(正如@Derek朕会功夫所指出的那样),

value: obj[key] || ""

答案 1 :(得分:1)

您需要检查对象是否具有属性 - 键。

  value: obj.hasOwnProperty(key) && obj[key] != undefined ? obj[key] : ""

//或者你可以这样写(我更喜欢,认为括号语法有点丑陋):

   value: obj.hasOwnProperty(key) && obj.key != undefined ? obj.key : ""

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

答案 2 :(得分:1)

由于您使用主干,您可以使用下划线defaults方法:

return _.defaults({attribute: key, value: obj[key]}, {value: ''});

答案 3 :(得分:0)

toQueryString: function(){
  var obj = this.toQueryData(),
    qs = [];
  for (key in obj) {
    qs.push(key + "=" + (obj.hasOwnProperty(key) && obj.key != undefined ? obj.key : ""));
  }
  return qs.join('&')
}

这最终成为了解决方案,感谢Marko!