Javascript 如何改变这个的值。有循环的东西

Javascript 如何改变这个的值。有循环的东西,javascript,node.js,Javascript,Node.js,伙计们,我怎么才能弄干这个密码?我试着这样做: if (this.name === '') { this.name= 'None'; } if (this.obs === '') { this.obs = 'None'; } var v=[this.name,this.obs]; 对于(变量i=0;i

伙计们,我怎么才能弄干这个密码?我试着这样做:

    if (this.name === '') {
        this.name= 'None';
    }
    if (this.obs === '') {
        this.obs = 'None';
    }
var v=[this.name,this.obs];
对于(变量i=0;i

但根本不起作用…

循环中与OR运算符一起为..使用

var v = [this.name, this.obs];

for(var i = 0; i < v.length; i++) {
   if(v[i] === '') {
       v[i] = 'None';
   } 
};

for..in
循环通过
this
this[key]
的可枚举属性,如果它不是
,则将其分配给自身。如果它是
'
,那么
'None'
将被分配给它,因为
'
被认为是错误的

我想你要找的是一个函数。 像这样的

for(var key in this)
   this[key] = this[key] || 'None';
function setToNoneIfEmpty (stringInput) {
    if (stringInput === '') {
        stringInput = 'none';
    }
    return stringInput;
}
function setToNoneIfEmpty (stringInput) {
    return stringinput === '' ? 'None' : stringinput;
}
为了使它更简洁,您应该使用一个三元语句,只返回值而不重新分配参数,因此函数如下所示

for(var key in this)
   this[key] = this[key] || 'None';
function setToNoneIfEmpty (stringInput) {
    if (stringInput === '') {
        stringInput = 'none';
    }
    return stringInput;
}
function setToNoneIfEmpty (stringInput) {
    return stringinput === '' ? 'None' : stringinput;
}
有了它,您应该能够传入
this.name
this.obs
,函数将相应地更改它们。你会这样称呼他们吗

for(var key in this)
   this[key] = this[key] || 'None';
function setToNoneIfEmpty (stringInput) {
    if (stringInput === '') {
        stringInput = 'none';
    }
    return stringInput;
}
function setToNoneIfEmpty (stringInput) {
    return stringinput === '' ? 'None' : stringinput;
}
您的原始代码不起作用,因为您创建了一个多维数组,然后没有以多维数组的形式访问这些值,所以不起作用

我建议的方法会更好用,更容易阅读


我不是Javascript方面的专业人士(由longshot提供),但有人向我提到,可以采用不同的方式,即实际访问对象并传入要检查的对象属性

this.name = setToNoneIfEmpty(this.name);
this.obs = setToNoneIfEmpty(this.obs);
因此,我们没有传入一个变量来返回字符串,而是传入一个对象和属性名,这使得代码更加枯燥,正如我们在使用它时所看到的那样

function setToNoneIfEmpty(obj, name) {
    if (obj[name] === '') { 
        obj[name] = 'None'; 
    } 
}

请记住,我们不仅可以访问对象的属性,如
object.property
,还可以通过下标运算符:
object['property']
。因此,我们可以循环使用要更改的属性的所有名称:

setToNoneIfEmpty(this, 'name')
setToNoneIfEmpty(this, 'obs')
试试这个:

['name', 'obs'].forEach(function (key) {
    if (this[key] === '') {
        this[key] = 'None';
    }
});

@梅斯科巴拉兹他制作了一个物体阵列properties@kidwon我的错,你是对的。请在
v
创建后添加
console.log(v)
,以检查它是否不包含
未定义的
-s或其他你不期望的内容['''',]@GlenSwift@MelanciaUK,这个问题与CR无关。不要在CR上发布这个问题。我们只查看工作代码。Glen Swift和mesokobalazs,这个是一个对象,正如OP在他的第一个代码片段中所显示的那样。DownVorters,我在循环中只在一个对象上使用for..in,因为这个是对象,其属性OP正在生成一个数组。我没有使用数组。@GlenSwift,没有提到它。奥普说,他只是试了一下。他想做的就是我做的。@DRX这两行代码就是你所需要的。我没有使用数组。因此,您不必担心有多少属性。@GlenSwift OP已经从
this
创建了一个属性数组来进行迭代。这样就不必担心了。@Malachi仍然不起作用。
outparam.value
技巧的思想是传入一个引用类型,我们可以在函数内部对其进行变异。但我们不能在这里真正做到这一点——我们必须编写
var param={'value':this.name};SetToNoneIfEmpty(参数);this.name=param.value
避免复制值,这会破坏干燥代码的目的。在JavaScript中,
'
的计算结果为
false
@amon这可能会起作用,因为他将值赋回原始属性。是的,当前值在干燥和简单之间取得了合理的平衡。@davintroon可能是的,但这并不完全等同于问题中的代码。考虑当属性为“代码> false < /COD>”或“代码> NUL/<代码>或<代码>未定义< /代码>时发生的情况。OP的代码将保留它们,使用
|
操作符将替换它们。